Various tweaks to keep in sync with new changes to osg::Timer and osgGA::EventQueue

This commit is contained in:
Robert Osfield
2006-12-26 17:38:47 +00:00
parent 84d22f9999
commit 6a74240d22
7 changed files with 39 additions and 20 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 )

View File

@@ -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;

View File

@@ -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());

View File

@@ -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();

View File

@@ -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();