diff --git a/NEWS.txt b/NEWS.txt index 0ce4e8212..28c02bfbb 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -3,76 +3,95 @@ OSG News (most significant items from ChangeLog) ================================================ - osgProducer library adds very tight integration with OpenProducer, - provide the OpenSceneGraph with a scalable, configurable and portable - framework for developing real-time and interactive graphics application. - The scalability afforded by OpenProducer allows applications to be - developed which seemlessly run on single pipe machines up to multi-pipe - machines such as Sgi Onyx IR system, and Sun Zulu systems, through - to running of clusters. The osgProducer/OpenProducer framework - automatically handles the multi-threading of cull-draw pairs and GUI - events. +18th April 2003 - OpenSceneGraph-0.9.4 + + >>> Multi-threaded, multi-pipe support via integration with OpenProducer, + >>> 64bit Linux support for Intel Intanium and AMD Opteron, + >>> new osgText library with greater performance, and thread safety, + >>> new DDS plug-in for compressed and non-compressed images, + >>> new MD2 plug-in adds support for animate Quake character, + >>> support added for NV_texture_rectangle. + + The most significant new feature is the osgProducer library that adds + tight integration with OpenProducer, providing the OpenSceneGraph with a + scalable, configurable and portable framework for developing real-time + and interactive graphics applications. The scalability afforded by + OpenProducer allows applications to be developed which run seamlessly + on single pipe machines up to multi-pipe machines such as Sgi Onyx + IR system, and Sun Zulu systems. + The osgProducer/OpenProducer framework automatically handles the + multi-threading of cull-draw pairs and GUI events. All the example programs have been ported over from being based on - GLUT to using osgProducer. This allows all the examples to scale from - running on laptops up to multiple cpu and graphics pipe systems. The + GLUT to using osgProducer. This allows all the examples to scale from + running on laptops up to multiple CPU and graphics pipe systems. The configuration of threading and multiple camera views can all be done - via ASCII configuration files, no need to recompile. + via ASCII configuration files, no need to recompile. A number of + new examples have also been added or revamped, bringing the total to 42. - Added Linux 64 bit support for IA64 (Intel Itanium) and x86-64 (AMD Opteron) - which augments the existing support for Solaris and IRIX 64 bit compilation. - 64 bit supports allows the use of very large data set, and potential - peformance improvemnts. + Also in the theme of increasing scalability there is support for 64bit Linux for both + IA64 (Intel Itanium) and x86-64 (AMD Opteron) which compliments the existing + support for Solaris and IRIX 64 bit compilation. 64 bit supports allows + the use of very large data sets, and potential performance improvements. - Improvements to the makefile system, all makefiles are now named - GNUmakefile which ensures that they are only run by gmake. The new system - allow multiple build targets to be built from one source code install. + To help support development teams working with multiple build configuration, + the makefile system has been extended to allow multiple build targets to be + built from one source code base. All makefiles are also now named GNUmakefile + which ensures that they are only run by gmake to avoid an confusion on system + where gmake isn't the default make tool. - Completely new osgText implemention which is simpler to use, faster, and - thread safe. Support for high quality true type fonts has now been moved - to a freetype plugin which is dynamically loaded on demand, with the - core osgText library providing a default font when the plugin is - unavailable. Moving the freetype dependancy out of the osgText allows - the text library to be just dependant on OpenGL and Standard C++ like - the rest of the core libraries, virtual of this osgText now compiles - by default on platforms. + A completely new osgText implemention has been developed which is simpler + to use, faster, and thread safe. Support for high quality true type fonts + has now been moved to a freetype plug-in which is dynamically loaded on demand, + with the core osgText library providing a default font when the plug-in is + unavailable. Moving the freetype dependency out of the osgText library makes + it just dependant on OpenGL and Standard C++ like the rest of the core libraries, + allowing osgText to compile by default on all platforms. - Improved thread safety when working multipipe systems. + Improved thread safety has also been achieved in the core osg and osgUtil libraries + making work on multiple CPU/multi-pipe systems robust and with improved performance. - New DDS plugin for loading compressed and non-compressed images. - - New MD2 plugin which allows Quake animated characters to be loaded - into the OSG. + Two new plug-ins have been added, for loading DDS and MD2 data formats. The DDS plug-in + is for loading compressed and non-compressed images. The MD2 plug-in loads Quake + animated characters. - New osg::TextureRectangle texture class which encapsulates the - NV_texture_rectangle and EXT_texture_rectange extensions. + osg::TextureRectangle class has been added, which encapsulates the + NV_texture_rectangle and EXT_texture_rectangle extensions. This is particularly + useful for render to texture algorithms, and dynamic paging of images such as for + rendering video streams. - Added automatic subloading of textures when image data is updated. + Support for automatic subloading of osg::Texture2D textures has been added + so that when image data is updated the corresponding OpenGL texture is + automatically updated - no need for callbacks. Also added to the osg::Texture + classes is the option of automatic unref'ing of texture image data once the data has + been download to all active OpenGL graphics contexts. - Added the option of automatic unref'ing of texture image data once the data has - been download to OpenGL to active graphics contexts. - - New osgUtil::DelaunayTriangulator utlity class for tesselating data points. + A new osgUtil::DelaunayTriangulator utility class has been added. This is ideal for + creating optimal triangular meshes from unconnected data points. - New osg::ArgumentParser and osg::ApplicationUsage classes for - convineiently and robustly parsing command line arguments and - report command line usage, environmental variables and - keyboard and mouse bindings used by applications. Running any - of the examples with -h or --help will report full details example - usage. Keyboard and Mouse bindings usage is now also available as - a HUD on all examples, simply press 'h' while the app is runing to + Two new classes, osg::ArgumentParser and osg::ApplicationUsage, have been introduced + to convineiently and robustly parse command line arguments and + report command line usage, environmental variables and keyboard and mouse bindings + used by applications. Running any of the examples with -h or --help will report + full details example usage. Keyboard and Mouse bindings usage is now also available as + a HUD on all examples, simply press 'h' while the app is running to bring up help. - New database cache in the osgDB library. + A database cache in the osgDB library has been added, along with a clean up + of memory management in the OpenFlight loader, make development of + dynamic paging of databases easier and more robust. - Added support for early abort of rendering, useful for interactive - applications which occasional have rendering that takes that long - enough (i.e. several seconds) that end users may wish to abort - during the drawing. + Support for early abort of rendering has been added, which is useful for + interactive applications which occasionally have rendering that takes that long + enough (i.e.several seconds) that end users may wish to abort during the drawing. - Clean up of memory management in the OpenFlight loader. + There have also been many general API improvements and bug fixes, too many to enumerate, + but all go to solidify the quality of the scene graph and its accompanying libraries. + + The combination of new features, robustness and scalability mark this release as a + significant step towards 1.0. + - Various API clean ups and bug fixes. 24th January 2003 - OpenSceneGraph-0.9.3.tar.gz @@ -395,7 +414,7 @@ OSG News (most significant items from ChangeLog) far away! -24th February 2002 - osg-0.8.44.tar.gz +24th February 2002 - osg-0.8.44.tar.gzosg- >>> Support added for Mac OSX, Cygwin and MinGW, and new TerraPage loader. diff --git a/doc/dependencies.html b/doc/dependencies.html index a027b70c3..fe82dea81 100644 --- a/doc/dependencies.html +++ b/doc/dependencies.html @@ -81,7 +81,7 @@ library.
  • src/osgProducer - The osgProducer library depends upon, you guessed it, Producer...
  • - +
    diff --git a/examples/osgoccluder/osgoccluder.cpp b/examples/osgoccluder/osgoccluder.cpp index fbf95bfa8..5fa26506e 100644 --- a/examples/osgoccluder/osgoccluder.cpp +++ b/examples/osgoccluder/osgoccluder.cpp @@ -26,7 +26,7 @@ class OccluderEventHandler : public osgGA::GUIEventHandler { public: - OccluderEventHandler(osgUtil::SceneView* sceneview,osg::Group* rootnode):_sceneview(sceneview),_rootnode(rootnode) {} + OccluderEventHandler(osgProducer::Viewer* viewer):_viewer(viewer) {} virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&); @@ -39,8 +39,10 @@ class OccluderEventHandler : public osgGA::GUIEventHandler void endOccluder(); + osg::Group* rootNode() { return dynamic_cast(_viewer->getSceneData()); } - osg::ref_ptr _sceneview; + + osgProducer::Viewer* _viewer; osg::ref_ptr _rootnode; osg::ref_ptr _occluders; osg::ref_ptr _convexPlanarOccluder; @@ -55,34 +57,20 @@ bool OccluderEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIAct if (ea.getKey()=='a') { - float x = ea.getX(); - float y = ea.getY(); + float x = ea.getXnormalized(); + float y = ea.getYnormalized(); - osg::Vec3 near_point,far_point; - if (!_sceneview->projectWindowXYIntoObject(x,ea.getYmax()-y,near_point,far_point)) + osgUtil::IntersectVisitor::HitList hitList; + if (!_viewer->computeIntersections(x,y,hitList)) { return true; } - osg::ref_ptr lineSegment = new osg::LineSegment; - lineSegment->set(near_point,far_point); - - osgUtil::IntersectVisitor iv; - iv.addLineSegment(lineSegment.get()); - - _rootnode->accept(iv); - - if (iv.hits()) + if (!hitList.empty()) { - - osgUtil::IntersectVisitor::HitList& hitList = iv.getHitList(lineSegment.get()); - if (!hitList.empty()) - { - - osgUtil::Hit& hit = hitList.front(); - addPoint(hit.getWorldIntersectPoint()); - } + osgUtil::Hit& hit = hitList.front(); + addPoint(hit.getWorldIntersectPoint()); } return true; @@ -96,8 +84,9 @@ bool OccluderEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIAct { if (_occluders.valid()) { - std::cout<<"saving occluders to 'saved_occluders.osg'"<addChild(_occluders.get()); + if (rootNode()) rootNode()->addChild(_occluders.get()); } _occluders->addChild(occluderNode); @@ -297,6 +286,11 @@ int main( int argc, char **argv ) bool manuallyCreateOccluders = false; while (arguments.read("-m")) { manuallyCreateOccluders = true; } + if (manuallyCreateOccluders) + { + viewer.getEventHandlerList().push_front(new OccluderEventHandler(&viewer)); + } + // get details on keyboard and mouse bindings used by the viewer. viewer.getUsage(*arguments.getApplicationUsage()); @@ -349,12 +343,6 @@ int main( int argc, char **argv ) // create the windows and run the threads. viewer.realize(); - if (manuallyCreateOccluders) - { - osgUtil::SceneView* sceneview = viewer.getSceneHandlerList()[0].get(); - - viewer.getEventHandlerList().push_front(new OccluderEventHandler(sceneview,rootnode.get())); - } while( !viewer.done() ) { diff --git a/src/osgPlugins/txp/trpage_material.cpp b/src/osgPlugins/txp/trpage_material.cpp index 10091eaf4..b5138d368 100644 --- a/src/osgPlugins/txp/trpage_material.cpp +++ b/src/osgPlugins/txp/trpage_material.cpp @@ -1208,6 +1208,8 @@ int32 trpgTexture::CalcTotalSize() const return totSize; } + default: + break; }; // Figure out the total data size, including mipmaps if necessary @@ -1342,6 +1344,8 @@ void trpgTexture::CalcMipLevelSizes() case trpg_INTA8: pixel_size = 2; break; + default: + break; } levelOffset.clear(); diff --git a/src/osgProducer/Viewer.cpp b/src/osgProducer/Viewer.cpp index 964915510..148e2ad07 100644 --- a/src/osgProducer/Viewer.cpp +++ b/src/osgProducer/Viewer.cpp @@ -437,7 +437,7 @@ bool Viewer::computeNearFarPoints(float x,float y,unsigned int cameraNum,osg::Ve float pixel_x,pixel_y; if (computePixelCoords(x,y,cameraNum,pixel_x,pixel_y)) { - return scenehandler->projectWindowXYIntoObject(pixel_x,pixel_y,near_point,far_point); + return scenehandler->projectWindowXYIntoObject((int)(pixel_x+0.5f),(int)(pixel_y+0.5f),near_point,far_point); } return false; diff --git a/src/osgProducer/ViewerEventHandler.cpp b/src/osgProducer/ViewerEventHandler.cpp index 9a90850e1..9ad53ccbe 100644 --- a/src/osgProducer/ViewerEventHandler.cpp +++ b/src/osgProducer/ViewerEventHandler.cpp @@ -226,7 +226,7 @@ void ViewerEventHandler::StatsAndHelpDrawCallback::createHelpText() osgText::Text* text = new osgText::Text; text->setFont("fonts/arial.ttf"); text->setColor(colorDescription); - text->setFontSize(characterSize,characterSize); + text->setFontSize((unsigned int)characterSize,(unsigned int)characterSize); text->setCharacterSize(characterSize); text->setPosition(posDescription); text->setMaximumWidth(maxWidthOfDisplayRegion); @@ -252,7 +252,7 @@ void ViewerEventHandler::StatsAndHelpDrawCallback::createHelpText() osgText::Text* text = new osgText::Text; text->setFont("fonts/arial.ttf"); text->setColor(colorOption); - text->setFontSize(characterSize,characterSize); + text->setFontSize((unsigned int)characterSize,(unsigned int)characterSize); text->setCharacterSize(characterSize); text->setPosition(posOption); text->setAlignment(osgText::Text::BASE_LINE); @@ -279,7 +279,7 @@ void ViewerEventHandler::StatsAndHelpDrawCallback::createHelpText() osgText::Text* text = new osgText::Text; text->setFont("fonts/arial.ttf"); text->setColor(colorExplanation); - text->setFontSize(characterSize,characterSize); + text->setFontSize((unsigned int)characterSize,(unsigned int)characterSize); text->setCharacterSize(characterSize); text->setPosition(posExplanation); text->setMaximumWidth(maxWidth); @@ -613,7 +613,7 @@ void ViewerEventHandler::StatsAndHelpDrawCallback::createStatsText() osgText::Text* text = new osgText::Text; text->setFont("fonts/arial.ttf"); text->setColor(colorUpdate); - text->setFontSize(characterSize,characterSize); + text->setFontSize((unsigned int)characterSize,(unsigned int)characterSize); text->setCharacterSize(characterSize); text->setPosition(pos); text->setAlignment(osgText::Text::BASE_LINE); @@ -627,7 +627,7 @@ void ViewerEventHandler::StatsAndHelpDrawCallback::createStatsText() _updateTimeText->setFont("fonts/arial.ttf"); _updateTimeText->setColor(colorUpdate); - _updateTimeText->setFontSize(characterSize,characterSize); + _updateTimeText->setFontSize((unsigned int)characterSize,(unsigned int)characterSize); _updateTimeText->setCharacterSize(characterSize); _updateTimeText->setPosition(pos); _updateTimeText->setAlignment(osgText::Text::BASE_LINE); @@ -650,7 +650,7 @@ void ViewerEventHandler::StatsAndHelpDrawCallback::createStatsText() osgText::Text* cullLabel = new osgText::Text; cullLabel->setFont("fonts/arial.ttf"); cullLabel->setColor(colorCull); - cullLabel->setFontSize(characterSize,characterSize); + cullLabel->setFontSize((unsigned int)characterSize,(unsigned int)characterSize); cullLabel->setCharacterSize(characterSize); cullLabel->setPosition(pos); cullLabel->setAlignment(osgText::Text::BASE_LINE); @@ -664,7 +664,7 @@ void ViewerEventHandler::StatsAndHelpDrawCallback::createStatsText() cullField->setFont("fonts/arial.ttf"); cullField->setColor(colorCull); - cullField->setFontSize(characterSize,characterSize); + cullField->setFontSize((unsigned int)characterSize,(unsigned int)characterSize); cullField->setCharacterSize(characterSize); cullField->setPosition(pos); cullField->setAlignment(osgText::Text::BASE_LINE); @@ -680,7 +680,7 @@ void ViewerEventHandler::StatsAndHelpDrawCallback::createStatsText() osgText::Text* drawLabel = new osgText::Text; drawLabel->setFont("fonts/arial.ttf"); drawLabel->setColor(colorDraw); - drawLabel->setFontSize(characterSize,characterSize); + drawLabel->setFontSize((unsigned int)characterSize,(unsigned int)characterSize); drawLabel->setCharacterSize(characterSize); drawLabel->setPosition(pos); drawLabel->setAlignment(osgText::Text::BASE_LINE); @@ -694,7 +694,7 @@ void ViewerEventHandler::StatsAndHelpDrawCallback::createStatsText() drawField->setFont("fonts/arial.ttf"); drawField->setColor(colorDraw); - drawField->setFontSize(characterSize,characterSize); + drawField->setFontSize((unsigned int)characterSize,(unsigned int)characterSize); drawField->setCharacterSize(characterSize); drawField->setPosition(pos); drawField->setAlignment(osgText::Text::BASE_LINE);