[osg-users] osgViewer + Fox Toolkit example

Markus Hein mahein at online.no
Fri Sep 7 00:03:32 PDT 2007


Hi Tomas,

today I could check how I implemented the frame-update for multiple Windows under Win32.  It is done like this:


long FOX_OSG_MDIView::OnIdle(FXObject *sender, FXSelector sel, void* ptr)
{
	
	if(m_osgViewer.valid() )
	{
		if(m_osgViewer->getCamera()->getGraphicsContext()->makeCurrent())
		{
			m_osgViewer->frame();
			   m_osgViewer->getCamera()->getGraphicsContext()->releaseContext();
		}

		
	}

        getApp()->addChore(this, ID_CHORE); 

	return 1;
}



I justed checked if multiple Windows are updated correctly, but I havn't done further testings on this. Also tested resizing and closedown of some of the viewer-windows. it worked so long without probsunder win32.



just instantiate multiple views like this:

FOX_OSG_MDIView* mdichild;

	for(int i = 0 ; i < 2; i++)
	{
		for(int j = 0 ; j < 2; j++)
		{
			mdichild=new FOX_OSG_MDIView(__sharedScene.get(),mdiclient,"FOX osgViewer", NULL, mdimenu,MDI_TRACKING,10+(640*i),10+(480*j),640,480); //not MDI_MAXIMIZED!

		}
	}

	mdichild->setFocus();
	mdiclient->setActiveChild(mdichild);


the GUI update mechanism is independent from the render-main-loops, so you will get stable update rates in the viewer windows. I'm running  each of the viewer windows with stable frequency of 50 Hz, while the gui is also updated, but at very low frequency.

Updating your osg related stuff is easy in fox (same as in qt, fltk, wxwindows etc.):
simply create datatargets used by the gui-widgets, connect them with your application data make your application data accessible by update-callbacks  and uniform-callbacks in osg.

It works fine for me so long.

Markus


More information about the osg-users mailing list