zoukankan      html  css  js  c++  java
  • osgViewer销毁bug

    osgViewer的析构函数中会调用GraphicsContext::close();GraphicsContext::close()中会 释放分配的显示列表;而osgViewer的基类中osg::View的析构函数中才会删除Camera节点,这样就造成一些显示列表没有被释放的问题。

    osg中删除显示列表时,并不真正删除,而是缓存起来,下次再分配时,会根据显示列表的大小重新使用。

    osg中会为GraphicsContext分配一个ID,这个ID在GraphicsContext删除会,下次创建的GraphicsContext会再次使用。

    osg::Drawable 会记录GraphicsContext ID中删除的显示列表(并未真正删除),如果在调用GraphicsContext::close()时一些分配的显示列表没有删除,新创建的 GraphicsContext中会出现一些显示列表无效的问题。

    解决方法:

    1. osgViewer的析构函数前释放Camera节点。

    pViewer->setCamera(NULL);

    pViewer->setSceneData(NULL);

    2. GraphicsContext在osgViewer之后析构。

  • 相关阅读:
    委托
    apply()和call()
    Sql小技巧
    plsql中文乱码
    Windows8中使用IE8等低版本浏览器
    React Native
    谷歌浏览器添加flash白名单
    jsonp原理详解
    垂直居中
    window.moveTo(),window.moveBy()不生效
  • 原文地址:https://www.cnblogs.com/cpp-graphics/p/osg.html
Copyright © 2011-2022 走看看