NotifyLogger: Shifted the class from flightgear to simgear.
This is to allow the code to be reused in the flightgear test suite.
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
include (SimGearComponent)
|
include (SimGearComponent)
|
||||||
|
|
||||||
set(HEADERS debug_types.h logstream.hxx BufferedLogCallback.hxx)
|
set(HEADERS debug_types.h logstream.hxx BufferedLogCallback.hxx OsgIoCapture.hxx)
|
||||||
set(SOURCES logstream.cxx BufferedLogCallback.cxx)
|
set(SOURCES logstream.cxx BufferedLogCallback.cxx)
|
||||||
|
|
||||||
simgear_component(debug debug "${SOURCES}" "${HEADERS}")
|
simgear_component(debug debug "${SOURCES}" "${HEADERS}")
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
#include <osg/Notify>
|
||||||
|
|
||||||
|
using namespace osg;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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) {
|
||||||
|
// Detect whether a osg::Reference derived object is deleted with a non-zero
|
||||||
|
// reference count. In this case trigger a segfault to get a stack trace.
|
||||||
|
if (strstr(message, "the final reference count was")) {
|
||||||
|
// as this is going to segfault ignore the translation of severity and always output the message.
|
||||||
|
SG_LOG(SG_GL, SG_ALERT, message);
|
||||||
|
int* trigger_segfault = 0;
|
||||||
|
*trigger_segfault = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
default: return SG_ALERT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user