[osg-users] [build] XP VS2008 Lost References

Robert Osfield robert.osfield at gmail.com
Wed Apr 6 02:50:05 PDT 2011


Hi Tom,

Rather than GraphicsWindow loosing it's reference to the EventQueue
I'd suspect that that the window itself has been deleted and this is
causing the corruption.  There is also a possibility that you've got
an inconsistency in the build of your app vs the OSG, you'll need to
look at the archives on the idiosyncrasies of VisualStudio to see what
these might be.

Robert.

On Tue, Apr 5, 2011 at 5:05 PM, Tom Appollo <tappollo at harris.com> wrote:
> I am running OSG 2.8.3 (latest stable build) on XP compiled in VS2008.
>
> My application is using a GraphicsWindowEmbedded object.
> Here is the code snippets pertaining to it.
>
> In the .h file:
>
> Code:
> osg::ref_ptr<osgViewer::GraphicsWindowEmbedded>   theGraphicWindow;
>
>
>
> In the .cpp constructor:
>   theGraphicWindow = new osgViewer::GraphicsWindowEmbedded(0, 0, width(), height());
> // where width() returns 1020 and height() returns 720
> cerr<<"Checking references to each of theGraphicWindow parts:"<<endl
>
> <<"   theGraphicWindow: "<<theGraphicWindow->referenceCount()<<endl
>
> <<"   EventQueue: "<<theGraphicWindow->getEventQueue()->referenceCount()<<endl
>
> <<"   GUIAdapter: "<<theGraphicWindow->getEventQueue()->getCurrentEventState()->referenceCount() << endl;
>
> The cerr output is:
>
> Checking references to each of theGraphicWindow parts:
>   theGraphicWindow: 1
>   EventQueue: 4502986
>   GUIAdapter: 4552084
>
>
> Shortly after the constructor, on another start-up call my application makes a call:
>
>
> Code:
> theGraphicWindow->getEventQueue()->windowResize(0, 0, width, height);
>
>
>
> And at this point the application crashes.
> I've instrumented OSG to get some output and the actual line at which the crash occurs is simply the first assignment statement to one of its
> class variables:
>
> _windowX = x;
>
> within GUIEventAdapter::setWindowRectangle(int x, int y, int width, int height, bool updateMouseRange).
>
>
> Tracing the construct down to that level:
>
> GraphicsWindowEmbedded::public GraphicsWindow
>
> GraphicsWindow
>   contains
>     osgGA::EventQueue _eventQueue;
>
>  In its constructor:
>      GraphicsWindow() { _eventQueue = new osgGA::EventQueue; _eventQueue->setGraphicsContext(this); }
>
> EventQueue
>   contains
>      GUIEventAdapter _accumulateEventState;
>
>   In its constructor:
>          _accumulateEventState = new GUIEventAdapter();
>
> GUIEventAdapter
>   contains
>      int _windowX;
>      along with the other event tracking variables.
>
>
> So, judging by my output, it seems as though the GraphicsWindow somehow loses its reference to
> the EventQueue as a check of the referenceCount() seems to be garbage.
>
> I did check the referenceCount to _accumulateEventState after it is created in the EventQueue
> constructor and it is set at 1 which indicates it appears to be okay.
>
>
> I have these same code sets (my application and OSG 2.8.3) built in VS2003 and do not have this
> issue but other libraries force me to move on to VS2008. The output from the VS2003 version is:
>
> Checking references to each of theGraphicWindow parts:
>   theGraphicWindow: 1
>   EventQueue: 1
>   GUIAdapter: 1
>
>
> Are there any suggestions as to what might be missing or changes that I'd need to the OSG build?
>
> Thanks for your time,
> Tom
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=38228#38228
>
>
>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>



More information about the osg-users mailing list