<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>
Hi Robert,<BR>
 <BR>
Completely understandable :-)<BR>
 <BR>
Regards,<BR>
Viggo<BR>
<BR><BR>> Date: Fri, 25 Jul 2008 14:00:09 +0100<BR>> From: robert.osfield@gmail.com<BR>> To: osg-users@lists.openscenegraph.org<BR>> Subject: Re: [osg-users] Robert: I figured it out :-) (was: Is it possible to know when the node-graph is 'dirty'?)<BR>> <BR>> Hi Viggo,<BR>> <BR>> I am trying to get a release out the door. I'm afraid I don't have the<BR>> the time tot go chasing up experimental user code.<BR>> <BR>> Robert.<BR>> <BR>> On Fri, Jul 25, 2008 at 1:33 PM, Viggo Løvli <vigigio@hotmail.com> wrote:<BR>> > Hi Robert,<BR>> ><BR>> > I have a very strange bug.<BR>> ><BR>> > The code I have written to render one bin twice works fine in the project<BR>> > code-base that I am working on. I took the class and integrated into the<BR>> > OSGForest example, and there it does not work as expected.<BR>> ><BR>> > In the OSGForest example:<BR>> > - The bin is rendered two times, as expected.<BR>> > - The state-set that is added to only one of the bins are now used when both<BR>> > bins are rendered. And there is the bug :-/<BR>> ><BR>> > I would appreciate it if you could take a look at the code and try it out.<BR>> ><BR>> > I have attached my class to this mail, and below here is the new main<BR>> > function for OSGForest. Just keep the rest of the osgforest.cpp file as it<BR>> > is. Only add the include and the green code at the bottom of main.<BR>> ><BR>> ><BR>> > #include "TransparencyGlitchFixNode.h"<BR>> ><BR>> > int main( int argc, char **argv )<BR>> ><BR>> > {<BR>> ><BR>> ><BR>> ><BR>> > // use an ArgumentParser object to manage the program arguments.<BR>> ><BR>> > osg::ArgumentParser arguments(&argc,argv);<BR>> ><BR>> ><BR>> ><BR>> > // construct the viewer.<BR>> ><BR>> > osgViewer::Viewer viewer(arguments);<BR>> ><BR>> ><BR>> ><BR>> > float numTreesToCreates = 10000;<BR>> ><BR>> > arguments.read('--trees',numTreesToCreates);<BR>> ><BR>> ><BR>> ><BR>> > osg::ref_ptr<ForestTechniqueManager> ttm = new ForestTechniqueManager;<BR>> ><BR>> ><BR>> ><BR>> > viewer.addEventHandler(new TechniqueEventHandler(ttm.get()));<BR>> ><BR>> > viewer.addEventHandler(new<BR>> > osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));<BR>> ><BR>> ><BR>> ><BR>> > // add model to viewer.<BR>> ><BR>> > TransparencyGlitchFixNode* root = new TransparencyGlitchFixNode();<BR>> ><BR>> > root->addChild( ttm->createScene((unsigned int)numTreesToCreates) );<BR>> ><BR>> > viewer.setSceneData( root );<BR>> ><BR>> ><BR>> ><BR>> ><BR>> ><BR>> > return viewer.run();<BR>> ><BR>> > }<BR>> ><BR>> ><BR>> > Here is what to expect:<BR>> > - The forest will be rendered twice.<BR>> > - First pass will be additive blend without depth-buffer write.<BR>> > - Second pass shall be a normal render of the forest.<BR>> > - The bug is so that the state-set is used both times, so both get<BR>> > additive-blend.<BR>> ><BR>> > The additive-blend is something I have added only to ease the visual<BR>> > debugging. The final code shall only have the state for turning off<BR>> > depth-buffer write. If everything works smoothly then you are supposed to<BR>> > see the forest as normal but with high-lighting due to the additive blend at<BR>> > all places where the trees are transparent.<BR>> ><BR>> ><BR>> > Regards,<BR>> > Viggo<BR>> ><BR>> ><BR>> ><BR>> > ________________________________<BR>> > From: vigigio@hotmail.com<BR>> > To: osg-users@lists.openscenegraph.org<BR>> > Date: Fri, 25 Jul 2008 10:42:08 +0200<BR>> > Subject: Re: [osg-users] Robert: I figured it out :-) (was: Is it possible<BR>> > to know when the node-graph is 'dirty'?)<BR>> ><BR>> > Hi Robert,<BR>> ><BR>> >> Hi Viggo,<BR>> >><BR>> >> The rendering backend uses ref_ptr<>'s so there shouldn't be any leak,<BR>> >> assigning the new RenderBin will lead to the previous one being<BR>> >> deleted.<BR>> >><BR>> > Yep I figured out that one :-)<BR>> ><BR>> >> Rather than second guess what will be need might I suggest you<BR>> >> maintain a recycling list of ref_ptr<> to your custom RenderBin, then<BR>> >> traverse this list to find an entry that has a referenceCount() of<BR>> >> one, then take ownership of this.<BR>> >><BR>> > I took into usage a std::list which starts off empty. I am currently<BR>> > counting how many times cull-traverse is called and increasing the list at<BR>> > need.<BR>> ><BR>> > Your idea of checking the reference count is better. It will make the system<BR>> > more robust.<BR>> > I will continue using a std::list for this.<BR>> > I will keep track of what was the last used element of the list, so when I<BR>> > need a new one then I will traverse the list from that point. This should<BR>> > increase the chance of finding a free entry immediately.<BR>> > If I parse through the whole list, then I will insert a new element to the<BR>> > list and use that one.<BR>> > The list will thus grow to the maximum needed size and stay there until the<BR>> > class is deleted. Future changes of number of cameras or what ever<BR>> > re-configurations that can cause one thread to hold data longer will thus<BR>> > automatically work.<BR>> ><BR>> > I am also ensuring that the original RenderBinList of RenderStage is not<BR>> > changed anywhere else than for element 10. I used to add a new bin to<BR>> > element 9, but that may be in usage already. Element 10 will instead point<BR>> > to a new bin that contain it's own bin #9 and #10. Both will point to the<BR>> > original content that RenderStage pointed to in it's bin #10.<BR>> ><BR>> >> Robert.<BR>> >> _______________________________________________<BR>> >> osg-users mailing list<BR>> >> osg-users@lists.openscenegraph.org<BR>> >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org<BR>> ><BR>> ><BR>> ><BR>> > ________________________________<BR>> > Få Hotmail du også. Windows Live Hotmail nå med 5000 MB gratis<BR>> > lagringsplass.<BR>> ><BR>> ><BR>> > ________________________________<BR>> > Windows Live Messenger på mobilen. Hold kontakten - hvor som helst når som<BR>> > helst.<BR>> > _______________________________________________<BR>> > osg-users mailing list<BR>> > osg-users@lists.openscenegraph.org<BR>> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org<BR>> ><BR>> ><BR>> _______________________________________________<BR>> osg-users mailing list<BR>> osg-users@lists.openscenegraph.org<BR>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org<BR><BR><br /><hr />Få Hotmail du også. <a href='http://clk.atdmt.com/GBL/go/msnnkdre0010000005gbl/direct/01/' target='_new'>Windows Live Hotmail nå med 5000 MB gratis lagringsplass.</a></body>
</html>