Ogre的多线程同步支持

本文介绍了Ogre对多线程支持的目的,主要是为了保证线程安全,而非提高渲染效率。详细步骤包括:开启OgreMain的多线程支持,编译并链接boost_thread库,修改Ogre SDK,以及在运行样例时放置对应的dll文件。注意,开启线程支持可能降低非多线程应用的帧率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>



        近来因为开发的原因,需要在多线程下使用Ogre,就对此进行了考察,这里简单的介绍一下如何正常的编译多线程版本的Ogre。

    首先需要说明一点,Ogre对多线程的支持,其目的并不是为了提高渲染效率,毕竟对于以GPU为主的实时渲染而言,CPU负载的并行并不会带来什么实质的改善;更多的则是出于保证其在需要平衡CPUGPU负载的多线程应用中的线程安全性考虑,比如在驱动与渲染线程间共享视点数据或对象的运动数据,以及资源的后台加载等等。所以,更确切的说,Ogre实现的线程同步,而非多线程渲染。

         Ogre可以通过多种方式实现对多线程的支持,例如通过增加Layer或插件的方式实现,具体的可以参考Jeff Andrews的《Threading the OGRE3D Render System》,而其中最直接的方法就是由Ogre Main直接实现。这里就针对这种方法,介绍一下如何在多线程下正常编译与运行Ogre应用。

    下面的步骤中

        编译器采用VS2005 sp1

        Ogre版本为1.4.6,从线程同步角度来说,它比1.4.4要稳定

        Boost版本文目前的1.34.1

   

    具体的步骤如下:

1.将OgreConfig.h中的

#ifndef OGRE_THREAD_SUPPORT

#define  OGRE_THREAD_SUPPORT 1

#endif

的第二行改为1,即开启OgreMain的多线程支持功能;

  2.获取并编译boost_thread

    由于OgreMain的多线程支持是通过boost中的thread库实现的,因此在需要相关的文件才能够正常编译Ogre SDK。相关的文件可以从http://sourceforge.net/project/showfiles.php?group_id=7586下载,解压缩后的文件夹中会包含所有需要的头文件与库文件。

  3.重新编译Ogre SDK

    在编译之前,需要设置Include的路径,保证编译器能够找到boost库的头文件。

同时要将boost_thread的静态库复制到OgreDependencies目录下,具体如下:
    将
boost_thread-vc80-mt-gd-1_34_1.lib,改名为libboost_thread-vc80-mt-gd-1_34_1.lib,即增加“lib”前缀,放在Ogrenew/dependencies/lib/debug目录下;
    将
boost_thread-vc80-mt-1_34_1.lib,改名为libboost_thread-vc80-mt-1_34_1.lib,即增加“lib”前缀,放在Ogrenew/dependencies/lib/release目录下;

        都设置好后就可以重新编译Ogre SDK了,当然这会是一个漫长的等待过程,可以先单独编译OgreMain工程,获得必须的库文件后,在有选择的编译需要的例子,这样可以省下些时间。

  4.运行Samples

    在运行之前,需要提供boost_thread的运行期动态库,具体如下:
    将
boost_thread-vc80-mt-gd-1_34_1.dll放在Ogrenew/Samples/common/bin/Debug目录下;
    将
boost_thread-vc80-mt-1_34_1.dll放在Ogrenew/Samples/common/bin/Release目录下;

         由于Ogre的线程支持打开后,为了保证线程同步,实际上增加了CPU的开销,因此在运行Ogre的那些以GPU渲染为主的单线程例子时,打开多线程支持的情况下通常会导致帧速率有所下降。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值