查看: 642|回复: 0

求助OSG窗口创建的问题

[复制链接]

该用户从未签到

发表于 2016-1-14 22:45:04 | 显示全部楼层 |阅读模式
本帖最后由 hup 于 2016-1-15 11:00 编辑

学长毕业了,留的程序该我改了,以前接触OSG不深,所以遇到问题了,代码如下:
  1. m_hWndParent = hWnd;
  2.         first_load=true;


  3.         Title_text = new  osgText::Text;
  4.     Title_AirPort_Name=new osgText::Text;
  5.         Title_energy_type=new osgText::Text;


  6.         //osg::DisplaySettings::instance()->setNumMultiSamples(8);
  7.         m_osgRoot = new osg::Group();                                     //场景模型 根 的初始化
  8.         m_osgViewer = new osgViewer::Viewer();                             //视口 初始化
  9.        
  10.         osgViewer::Viewer& viewer1 = *m_osgViewer;
  11.         osg::GraphicsContext::WindowingSystemInterface* wsi =  osg::GraphicsContext::getWindowingSystemInterface();
  12.         if (!wsi)
  13.         {
  14.                 osg::notify(osg::NOTICE)
  15.                         <<"Error, no WindowSystemInterface available, cannot create windows."<<std::endl;
  16.                 return 1;
  17.         }
  18.         unsigned int width, height;
  19.         wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0), width, height);
  20.         osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;

  21.         osg::ref_ptr<osg::Referenced> windata = new osgViewer::GraphicsWindowWin32::WindowData(hWnd);

  22.         RECT rt;
  23.         GetWindowRect(hWnd,&rt);
  24.         int wnd_w = rt.right-rt.left;
  25.         int wnd_h = rt.bottom-rt.top;
  26.         int maxlen= wnd_w<wnd_h ? wnd_w : wnd_h;

  27.         traits->x = 0;
  28.         traits->y = 0;
  29.         traits->sharedContext = 0;
  30.         traits->setInheritedWindowPixelFormat = true;
  31.         traits->inheritedWindowData = windata;

  32.         traits->red = traits->green = traits->blue = 8;
  33.         traits->depth = 24;
  34.         //traits->alpha = 8;       
  35.         //traits->stencil = 8;
  36.         traits->doubleBuffer = true;
  37.         traits->mipMapGeneration = true;
  38.         traits->sampleBuffers = 0;
  39.         traits->samples = msp;
  40.        

  41.         if (bShowMax)
  42.         {
  43.                 traits->x = 0;
  44.                 traits->y = 0;
  45.                 traits->width = width;
  46.                 traits->height = height;
  47.                 traits->windowDecoration = false;
  48.         }
  49.         else
  50.         {
  51.                 traits->width = width/2;
  52.                 traits->height = height/2;
  53.                 traits->windowDecoration = true;
  54.         }

  55.         m_gc = osg::GraphicsContext::createGraphicsContext(traits.get());//[color=Red]这块出的问题[/color]
  56.         if (m_gc.valid())
  57.         {
  58.                 osg::notify(osg::INFO)<<"  GraphicsWindow has been created successfully."<<std::endl;
  59.                 m_gc->setClearColor(osg::Vec4f(0.2f,0.2f,0.6f,1.0f));
  60.                 m_gc->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  61.         }
  62.         else
  63.         {
  64.                 osg::notify(osg::NOTICE)<<"  GraphicsWindow has not been created successfully."<<std::endl;
  65.                 return false;
  66.         }
复制代码

上面创建OSG窗口代码每次运行到createGraphicsContext(traits.get())会报错“Unhandled exception at 0x7681c42d in AirportEnergy.exe: Microsoft C++ exception: std::__non_rtti_object at memory location 0x0a04f69c..”,可能是空指针或野指针问题,我在调试过程中发现windowName(定义:std::string windowName)属性中出现了Bad Ptr问题,但不知如何解决,因此在此求助,谢谢了

windowName

windowName

其他属性

其他属性
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表