在使用OSG时,发现会出现一些报错,比如
Error: OpenGL version test failed, requires valid graphics context
之前有过一些别的猜测,但是后来发现,引发类似报错的原因,还有可能是指针的使用错误。
利用osg编程的同学应该都知道有一个智能指针,osg::ref_ptr的存在,他类似于指针,但又与普通指针不同
如:
osg::ref_ptr<osgViewer::Viewer> _viewer
与
osgViewer::Viewer* _viewer
是相似但不同的,具体的区别可以自行百度,本案例只是提醒一下,如果混着用,会出现一些莫名其妙的报错。
那什么时候会混着使用呢?
比如在一个函数传参的时候:
头文件如下:
launchShift(osgViewer::Viewer* _viewer);
osg::ref_ptr<osgViewer::Viewer> _mainviewer;//视图场景
launchShift::launchShift(osgViewer::Viewer* _viewer)
{
_mainviewer=_viewer;
}
以上为错误示范,就会报错
正确的写法为:
launchShift(osg::ref_ptr<osgViewer::Viewer> _viewer);
osg::ref_ptr<osgViewer::Viewer> _mainviewer;//视图场景
launchShift::launchShift(osg::ref_ptr<osgViewer::Viewer> _viewer)
{
_mainviewer=_viewer;
}
即传参时,超级指针和普通指针并不能通用,直接赋值。