Map OSG notification system to Simgear logging.
With this, OSG notifications can be captured / buffered in-line with our other log messages, which should help debugging and feedback.
This commit is contained in:
parent
7ad55a206e
commit
1898449949
1 changed files with 35 additions and 0 deletions
|
@ -42,6 +42,7 @@
|
||||||
#include <osg/Matrixd>
|
#include <osg/Matrixd>
|
||||||
#include <osg/Viewport>
|
#include <osg/Viewport>
|
||||||
#include <osg/Version>
|
#include <osg/Version>
|
||||||
|
#include <osg/Notify>
|
||||||
#include <osg/View>
|
#include <osg/View>
|
||||||
#include <osgViewer/ViewerEventHandlers>
|
#include <osgViewer/ViewerEventHandlers>
|
||||||
#include <osgViewer/Viewer>
|
#include <osgViewer/Viewer>
|
||||||
|
@ -175,8 +176,42 @@ static const char * getStereoMode()
|
||||||
return "OFF";
|
return "OFF";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* merge OSG output into our logging system, so it gets recorded to file,
|
||||||
|
* and so we can display a GUI console with renderer issues, especially
|
||||||
|
* shader compilation warnings and errors.
|
||||||
|
*/
|
||||||
|
class NotifyLogger : public osg::NotifyHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// note this callback will be invoked by OSG from multiple threads.
|
||||||
|
// fortunately our Simgear logging implementation already handles
|
||||||
|
// that internally, so we simply pass the message on.
|
||||||
|
virtual void notify(osg::NotifySeverity severity, const char *message)
|
||||||
|
{
|
||||||
|
SG_LOG(SG_GL, translateSeverity(severity), message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
sgDebugPriority translateSeverity(osg::NotifySeverity severity)
|
||||||
|
{
|
||||||
|
switch (severity) {
|
||||||
|
case osg::ALWAYS:
|
||||||
|
case osg::FATAL: return SG_ALERT;
|
||||||
|
case osg::WARN: return SG_WARN;
|
||||||
|
case osg::NOTICE:
|
||||||
|
case osg::INFO: return SG_INFO;
|
||||||
|
case osg::DEBUG_FP:
|
||||||
|
case osg::DEBUG_INFO: return SG_DEBUG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void fgOSOpenWindow(bool stencil)
|
void fgOSOpenWindow(bool stencil)
|
||||||
{
|
{
|
||||||
|
osg::setNotifyHandler(new NotifyLogger);
|
||||||
|
//osg::setNotifyLevel(osg::DEBUG_INFO);
|
||||||
|
|
||||||
viewer = new osgViewer::Viewer;
|
viewer = new osgViewer::Viewer;
|
||||||
viewer->setDatabasePager(FGScenery::getPagerSingleton());
|
viewer->setDatabasePager(FGScenery::getPagerSingleton());
|
||||||
CameraGroup* cameraGroup = 0;
|
CameraGroup* cameraGroup = 0;
|
||||||
|
|
Loading…
Reference in a new issue