• 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之后析构。

  • 相关阅读:
    jmeter 插件
    jmeter beanshell
    Linux awk&sed
    Linux 各文件系统配置
    Linux常用基本命令 1
    testNg自动化,读取excel的数据
    jmeter 控制器
    Web
    SQL语句
    HTML
  • 原文地址:https://www.cnblogs.com/cpp-graphics/p/osg.html
Copyright © 2020-2023  润新知