在Ogre 1.7中,對多線程的支援有三個選擇:
要在Ogre 1.7中使用多線程:
- 在OgreBuildSettings.h改寫2行
- OGRE_THREAD_SUPPORT 2 // 通過ResourceBackgroundQueue實現。
- OGRE_THREAD_PROVIDER 3 // TBB library provides threading functionality
我採用C++的並行編程模板庫Threading Building Blocks。採用CMake構造的需要把TBB的檔案拷貝到Ogre的Dependence的相關目錄下。
Ogre 1.7 的 Threading changes
- WorkQueue added to accept generalised work items to be executed in background worker threads
- WorkQueue starts the number of workers based on hardware, or can be told to start a different number
- Main Ogre WorkQueue is in Root::getWorkQueue. You can also subclass WorkQueue and provide your own if you want
- ResourceBackgroundQueue now uses WorkQueue instead of using its own queue and can have multiple tasks running at once
- New focus on data-driven, task-based parallel execution with separation of GPU and CPU activities
- Boost, POCO and Thread Building Blocks supported as threading back-ends (Boost preferred)
- All Ogre thread support will use WorkQueue in future
備忘:1.7添加了一個Character Sample,其中SinbadCharacterController有參考價值。
採用OGRE_THREAD_SUPPORT = 1並不被推薦,而應該使用OGRE_THREAD_SUPPORT = 2。sinbad在Using the new threading scheme說明了原因。更具體的討論在high performance thread support - request for comments。當前,有Proposal: OGRE_THREAD_SUPPORT == 3,但是沒有整合到Ogre 1.7中。
關於多線程參考:多線程的渲染與物理類比(pdf)和Threading the OGRE3DRender System(pdf)
2010/07/07重新整理:關於WorkQueue可以參考OGRE多線程的使用