[osg-users] porting from osg-3.4.0 to osg-3.6.3

Herman Varma hermanvarma at eastlink.ca
Tue Oct 9 06:49:43 PDT 2018


Hi Robert


Yes  VTP calls  setEventVisitor

m_pOsgViewer->setEventVisitor(NULL);

in
bool vtScene::Init(int argc, char** argv, bool bStereo, int iStereoMode)

Code is listed below marked as //*******CALLED HERE





/**
 * Initialize the vtlib library, including the display and scene graph.
 * You should call this function only once, before any other vtlib calls.
 *
 * \param argc, argv Command-line arguments.
 * \param bStereo True for a stereo display output.
 * \param iStereoMode Currently for vtosg, supported values are 0 for
 *		Anaglyphic (red-blue) and 1 for Quad-buffer (shutter glasses).
 */
bool vtScene::Init(int argc, char** argv, bool bStereo, int iStereoMode)
{
	VTLOG1("vtScene::Init\n");

	// Redirect cout messages (where OSG sends its messages) to our own log
	previous_cout =  std::cout.rdbuf(&g_Trap);
	previous_cerr = std::cerr.rdbuf(&g_Trap);

#if 0
	// If you encounter trouble in OSG that you want to debug, enable this
	//  to get a LOT of diagnostic messages from OSG.
	osg::setNotifyLevel(osg::INFO);
#endif

	m_pDefaultCamera = new vtCamera;
	m_pDefaultWindow = new vtWindow;
	SetCamera(m_pDefaultCamera);
	AddWindow(m_pDefaultWindow);

    // use an ArgumentParser object to manage the program arguments.
    osg::ArgumentParser arguments(&argc,argv);

	m_pOsgViewer = new osgViewer::Viewer(arguments);

	m_pOsgViewer->setDisplaySettings(osg::DisplaySettings::instance());
	if (bStereo)
	{
		osg::DisplaySettings* displaySettings = m_pOsgViewer->getDisplaySettings();
		displaySettings->setStereo(true);
		osg::DisplaySettings::StereoMode mode;
		if (iStereoMode == 0) mode = osg::DisplaySettings::ANAGLYPHIC;
		if (iStereoMode == 1) mode = osg::DisplaySettings::QUAD_BUFFER;
		if (iStereoMode == 2) mode = osg::DisplaySettings::HORIZONTAL_SPLIT;
		if (iStereoMode == 3) mode = osg::DisplaySettings::VERTICAL_SPLIT;
		displaySettings->setStereoMode(mode);
	}
#ifdef __DARWIN_OSX__
	// Kill multi-threading on OSX until wxGLContext properly implemented on that platform
	m_pOsgViewer->setThreadingModel(osgViewer::Viewer::SingleThreaded);
#endif

	// We can't use displaySettings->setNumMultiSamples here to enable anti-
	// aliasing, because it has to be done eariler (at the time the OpenGL
	// context is made).

#ifdef VTP_USE_OSG_STATS
	osgViewer::StatsHandler* pStatsHandler = new osgViewer::StatsHandler;
	pStatsHandler->setKeyEventPrintsOutStats(0);
	pStatsHandler->setKeyEventTogglesOnScreenStats('x'); // I dont think this is used for anything else at the moment
	m_pOsgViewer->addEventHandler(pStatsHandler);
#endif

	// Kill the event visitor (saves a scenegraph traversal)
	// This will need to be restored if we need to use FRAME events etc. in the scenegraph
	m_pOsgViewer->setEventVisitor(NULL);//*******CALLED HERE

	if (bStereo)
	{
		// displaySettings->getScreenDistance(); default is 0.5
		// m_pOsgSceneView->getFusionDistanceMode(); default is PROPORTIONAL_TO_SCREEN_DISTANCE
		// m_pOsgSceneView->getFusionDistanceValue(); default is 1.0
		// The FusionDistanceValue is only used for USE_FUSION_DISTANCE_VALUE & PROPORTIONAL_TO_SCREEN_DISTANCE modes.

		// We use real-world units for fusion distance value
		m_pOsgViewer->setFusionDistance(osgUtil::SceneView::USE_FUSION_DISTANCE_VALUE, 100.0f);
	}

	// From the OSG mailing list: You must specify the lighting mode in
	// setDefaults() and override the default options. If you call
	// setDefaults() with the default options, a headlight is added to the
	// global state set of the SceneView.  With the default options applied,
	// I have tried subsequently calling setLightingMode(NO_SCENE_LIGHT)
	// and setLight(NULL), but I still get a headlight.
	m_pOsgViewer->setLightingMode(osg::View::NO_LIGHT);
	m_pOsgViewer->getCamera()->setComputeNearFarMode(osg::Camera::DO_NOT_COMPUTE_NEAR_FAR);
	m_pOsgViewer->getCamera()->setCullingMode(m_pOsgViewer->getCamera()->getCullingMode() & ~osg::CullSettings::SMALL_FEATURE_CULLING);

	// We maintain a node between OSG's viewer/camera and the vtlib Root, to
	//  control global state
	m_StateRoot = new osg::Group;
	m_pOsgViewer->setSceneData(m_StateRoot);

	// By default, things are lit, unless they ask not to be
	m_StateRoot->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::ON);

	//m_StateRoot->addCullCallback(new MyCull);
	//m_StateRoot->setUpdateCallback(new MyUpdate);
	//m_StateRoot->setEventCallback(new MyEvent);

	m_bInitialized = true;

	_initialTick = _timer.tick();
	_frameTick = _initialTick;

	return true;
}



Thank you!

Cheers,
Herman

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=75053#75053







More information about the osg-users mailing list