Various tweaks to keep in sync with new changes to osg::Timer and osgGA::EventQueue
This commit is contained in:
@@ -66,7 +66,6 @@ class OSGVIEWER_EXPORT Scene : public virtual osg::Referenced
|
||||
protected:
|
||||
|
||||
bool _firstFrame;
|
||||
osg::Timer_t _startTick;
|
||||
osg::ref_ptr<osg::FrameStamp> _frameStamp;
|
||||
|
||||
osg::ref_ptr<osg::Node> _sceneData;
|
||||
|
||||
@@ -86,7 +86,6 @@ class OSGVIEWER_EXPORT SimpleViewer : public virtual osgViewer::GraphicsWindow
|
||||
|
||||
|
||||
bool _firstFrame;
|
||||
osg::Timer_t _startTick;
|
||||
osg::ref_ptr<osg::FrameStamp> _frameStamp;
|
||||
|
||||
osg::ref_ptr<osgUtil::SceneView> _sceneView;
|
||||
|
||||
@@ -25,7 +25,9 @@
|
||||
#include <X11/keysym.h>
|
||||
#include <X11/Xmu/WinUtil.h>
|
||||
#include <X11/cursorfont.h>
|
||||
#include <X11/Intrinsic.h>
|
||||
|
||||
#include <X11/Xmd.h> /* For CARD16 */
|
||||
|
||||
using namespace osgViewer;
|
||||
|
||||
@@ -367,8 +369,9 @@ bool GraphicsWindowX11::realizeImplementation()
|
||||
if (!_initialized) return false;
|
||||
|
||||
XMapWindow( _display, _window );
|
||||
Window temp = _window;
|
||||
XSetWMColormapWindows( _display, _window, &temp, 1);
|
||||
|
||||
// Window temp = _window;
|
||||
// XSetWMColormapWindows( _display, _window, &temp, 1);
|
||||
|
||||
_realized = true;
|
||||
|
||||
@@ -492,6 +495,8 @@ void GraphicsWindowX11::checkEvents()
|
||||
|
||||
case MotionNotify :
|
||||
{
|
||||
osg::notify(osg::INFO)<<"MotionNotify time="<<ev.xmotion.time<<std::endl;
|
||||
|
||||
int wx, wy;
|
||||
Window win = 0L;
|
||||
if( ev.xmotion.same_screen )
|
||||
|
||||
@@ -18,7 +18,6 @@ using namespace osgViewer;
|
||||
Scene::Scene():
|
||||
_firstFrame(true)
|
||||
{
|
||||
_startTick = osg::Timer::instance()->tick();
|
||||
_frameStamp = new osg::FrameStamp;
|
||||
_frameStamp->setFrameNumber(0);
|
||||
_frameStamp->setReferenceTime(0);
|
||||
@@ -27,7 +26,6 @@ Scene::Scene():
|
||||
_updateVisitor->setFrameStamp(_frameStamp.get());
|
||||
|
||||
_eventQueue = new osgGA::EventQueue;
|
||||
_eventQueue->setStartTick(_startTick);
|
||||
|
||||
_eventVisitor = new osgGA::EventVisitor;
|
||||
|
||||
@@ -68,8 +66,7 @@ void Scene::frameAdvance()
|
||||
{
|
||||
// double previousTime = _frameStamp->getReferenceTime();
|
||||
|
||||
osg::Timer_t currentTick = osg::Timer::instance()->tick();
|
||||
_frameStamp->setReferenceTime(osg::Timer::instance()->delta_s(_startTick,currentTick));
|
||||
_frameStamp->setReferenceTime(osg::Timer::instance()->time_s());
|
||||
_frameStamp->setFrameNumber(_frameStamp->getFrameNumber()+1);
|
||||
|
||||
// osg::notify(osg::NOTICE)<<"Frame rate = "<<1.0/(_frameStamp->getReferenceTime()-previousTime)<<std::endl;
|
||||
|
||||
@@ -22,13 +22,10 @@ SimpleViewer::SimpleViewer():
|
||||
_sceneView->setDefaults();
|
||||
_sceneView->getState()->setContextID(osg::GraphicsContext::createNewContextID());
|
||||
|
||||
_startTick = osg::Timer::instance()->tick();
|
||||
_frameStamp = new osg::FrameStamp;
|
||||
_frameStamp->setFrameNumber(0);
|
||||
_frameStamp->setReferenceTime(0);
|
||||
|
||||
_eventQueue->setStartTick(_startTick);
|
||||
|
||||
_eventVisitor = new osgGA::EventVisitor;
|
||||
|
||||
setDatabasePager(new osgDB::DatabasePager);
|
||||
@@ -138,8 +135,7 @@ void SimpleViewer::frame()
|
||||
|
||||
void SimpleViewer::frameAdvance()
|
||||
{
|
||||
osg::Timer_t currentTick = osg::Timer::instance()->tick();
|
||||
_frameStamp->setReferenceTime(osg::Timer::instance()->delta_s(_startTick,currentTick));
|
||||
_frameStamp->setReferenceTime(osg::Timer::instance()->time_s());
|
||||
_frameStamp->setFrameNumber(_frameStamp->getFrameNumber()+1);
|
||||
|
||||
_sceneView->setFrameStamp(_frameStamp.get());
|
||||
|
||||
@@ -62,6 +62,11 @@ void View::setCameraManipulator(osgGA::MatrixManipulator* manipulator)
|
||||
}
|
||||
}
|
||||
|
||||
void View::addEventHandler(osgGA::GUIEventHandler* eventHandler)
|
||||
{
|
||||
_eventHandlers.push_back(eventHandler);
|
||||
}
|
||||
|
||||
void View::setUpViewAcrossAllScreens()
|
||||
{
|
||||
osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface();
|
||||
|
||||
@@ -163,7 +163,7 @@ void Viewer::realize()
|
||||
getContexts(contexts);
|
||||
|
||||
bool multiThreaded = getNumSlaves() > 1;
|
||||
|
||||
|
||||
if (multiThreaded)
|
||||
{
|
||||
_startRenderingBarrier = new osg::BarrierOperation(contexts.size()+1, osg::BarrierOperation::NO_OPERATION);
|
||||
@@ -202,10 +202,9 @@ void Viewer::realize()
|
||||
++citr)
|
||||
{
|
||||
(*citr)->realize();
|
||||
OpenThreads::Thread::YieldCurrentThread();
|
||||
}
|
||||
|
||||
OpenThreads::Thread::YieldCurrentThread();
|
||||
|
||||
bool grabFocus = true;
|
||||
if (grabFocus)
|
||||
{
|
||||
@@ -221,6 +220,9 @@ void Viewer::realize()
|
||||
}
|
||||
}
|
||||
|
||||
// initialize the global timer to be relative to the current time.
|
||||
osg::Timer::instance()->setStartTick();
|
||||
|
||||
|
||||
if (multiThreaded)
|
||||
{
|
||||
@@ -232,6 +234,7 @@ void Viewer::realize()
|
||||
if (!gc->getGraphicsThread()->isRunning())
|
||||
{
|
||||
gc->getGraphicsThread()->startThread();
|
||||
OpenThreads::Thread::YieldCurrentThread();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -288,10 +291,6 @@ void Viewer::frameEventTraversal()
|
||||
}
|
||||
}
|
||||
|
||||
_eventQueue->frame( _scene->getFrameStamp()->getReferenceTime() );
|
||||
|
||||
_eventQueue->takeEvents(events);
|
||||
|
||||
osgGA::GUIEventAdapter* eventState = getEventQueue()->getCurrentEventState();
|
||||
for(osgGA::EventQueue::Events::iterator itr = events.begin();
|
||||
itr != events.end();
|
||||
@@ -299,8 +298,27 @@ void Viewer::frameEventTraversal()
|
||||
{
|
||||
osgGA::GUIEventAdapter* event = itr->get();
|
||||
event->setInputRange(eventState->getXmin(), eventState->getYmin(), eventState->getXmax(), eventState->getYmax());
|
||||
|
||||
switch(event->getEventType())
|
||||
{
|
||||
case(osgGA::GUIEventAdapter::PUSH):
|
||||
case(osgGA::GUIEventAdapter::RELEASE):
|
||||
case(osgGA::GUIEventAdapter::DRAG):
|
||||
case(osgGA::GUIEventAdapter::MOVE):
|
||||
eventState->setX(event->getX());
|
||||
eventState->setY(event->getY());
|
||||
eventState->setButtonMask(event->getButtonMask());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
_eventQueue->frame( _scene->getFrameStamp()->getReferenceTime() );
|
||||
|
||||
_eventQueue->takeEvents(events);
|
||||
|
||||
|
||||
#if 0
|
||||
// osg::notify(osg::NOTICE)<<"Events "<<events.size()<<std::endl;
|
||||
for(osgGA::EventQueue::Events::iterator itr = events.begin();
|
||||
|
||||
Reference in New Issue
Block a user