2
0

bullet_multithreading.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>Multithreading Bullet Physics in jme3 :: jMonkeyEngine Docs</title>
  7. <link rel="canonical" href="https://wiki.jmonkeyengine.org/docs/jme3/advanced/bullet_multithreading.html">
  8. <meta name="keywords" content="documentation, physics, threading">
  9. <meta name="generator" content="Antora 2.3.3">
  10. <link rel="stylesheet" href="../../../_/css/site.css">
  11. <meta property="og:image" content="https://mitm001.github.io/docs.jmonkeyengine.org/_/img/iconx128.png">
  12. <meta property="og:description" content="Multithreading Bullet Physics in jme3">
  13. <meta property="og:title" content="jMonkeyEngine Docs">
  14. <link rel="icon" href="../../../_/img/favicon.ico" type="image/x-icon">
  15. </head>
  16. <body class="article">
  17. <header class="header">
  18. <nav class="navbar">
  19. <div class="navbar-brand">
  20. <a class="navbar-item" href="https://wiki.jmonkeyengine.org">
  21. <img alt="" src="../../../_/img/iconx128.png" width="32" type="image/x-icon" style="margin-right:16px">
  22. jMonkeyEngine Docs
  23. </a>
  24. <button class="navbar-burger" data-target="topbar-nav">
  25. <span></span>
  26. <span></span>
  27. <span></span>
  28. </button>
  29. </div>
  30. <div id="topbar-nav" class="navbar-menu">
  31. <div class="navbar-end">
  32. <div class="navbar-item theme-switch-wrapper">
  33. <label class="theme-switch" for="checkbox">
  34. <input type="checkbox" id="checkbox" />
  35. <div class="slider round"></div>
  36. </label>
  37. <p class="navlabel">Dark Mode</p>
  38. </div>
  39. <a class="navbar-item" href="https://github.com/jmonkeyengine/wiki">Github</a>
  40. </div>
  41. </div>
  42. </nav>
  43. </header>
  44. <div class="body">
  45. <div class="nav-container" data-component="docs" data-version="master">
  46. <aside class="nav">
  47. <div class="panels">
  48. <div class="nav-panel-menu is-active" data-panel="menu">
  49. <nav class="nav-menu">
  50. <h3 class="title"><a href="../../documentation.html">Docs</a></h3>
  51. <ul class="nav-list">
  52. <li class="nav-item" data-depth="0">
  53. <ul class="nav-list">
  54. <li class="nav-item" data-depth="1">
  55. <a class="nav-link" href="../../documentation.html">Getting Started</a>
  56. </li>
  57. <li class="nav-item" data-depth="1">
  58. <a class="nav-link" href="https://javadoc.jmonkeyengine.org/v3.3.2-stable">JavaDoc</a>
  59. </li>
  60. <li class="nav-item" data-depth="1">
  61. <button class="nav-item-toggle"></button>
  62. <a class="nav-link" href="../../jme3.html">jMonkeyEngine 3</a>
  63. <ul class="nav-list">
  64. <li class="nav-item" data-depth="2">
  65. <button class="nav-item-toggle"></button>
  66. <span class="nav-text">Beginner Tutorials</span>
  67. <ul class="nav-list">
  68. <li class="nav-item" data-depth="3">
  69. <a class="nav-link" href="../beginner/hello_simpleapplication.html">Hello SimpleApplication</a>
  70. </li>
  71. <li class="nav-item" data-depth="3">
  72. <a class="nav-link" href="../beginner/hello_node.html">Hello Node</a>
  73. </li>
  74. <li class="nav-item" data-depth="3">
  75. <a class="nav-link" href="../beginner/hello_asset.html">Hello Asset</a>
  76. </li>
  77. <li class="nav-item" data-depth="3">
  78. <a class="nav-link" href="../beginner/hello_main_event_loop.html">Hello Main Event Loop</a>
  79. </li>
  80. <li class="nav-item" data-depth="3">
  81. <a class="nav-link" href="../beginner/hello_input_system.html">Hello Input System</a>
  82. </li>
  83. <li class="nav-item" data-depth="3">
  84. <a class="nav-link" href="../beginner/hello_material.html">Hello Material</a>
  85. </li>
  86. <li class="nav-item" data-depth="3">
  87. <a class="nav-link" href="../beginner/hello_animation.html">Hello Animation</a>
  88. </li>
  89. <li class="nav-item" data-depth="3">
  90. <a class="nav-link" href="../beginner/hello_picking.html">Hello Picking</a>
  91. </li>
  92. <li class="nav-item" data-depth="3">
  93. <a class="nav-link" href="../beginner/hello_collision.html">Hello Collision</a>
  94. </li>
  95. <li class="nav-item" data-depth="3">
  96. <a class="nav-link" href="../beginner/hello_terrain.html">Hello Terrain</a>
  97. </li>
  98. <li class="nav-item" data-depth="3">
  99. <a class="nav-link" href="../beginner/hello_audio.html">Hello Audio</a>
  100. </li>
  101. <li class="nav-item" data-depth="3">
  102. <a class="nav-link" href="../beginner/hello_effects.html">Hello Effects</a>
  103. </li>
  104. <li class="nav-item" data-depth="3">
  105. <a class="nav-link" href="../beginner/hello_physics.html">Hello Physics</a>
  106. </li>
  107. </ul>
  108. </li>
  109. <li class="nav-item" data-depth="2">
  110. <button class="nav-item-toggle"></button>
  111. <span class="nav-text">Intermediate Tutorials</span>
  112. <ul class="nav-list">
  113. <li class="nav-item" data-depth="3">
  114. <button class="nav-item-toggle"></button>
  115. <span class="nav-text">Concepts</span>
  116. <ul class="nav-list">
  117. <li class="nav-item" data-depth="4">
  118. <a class="nav-link" href="../intermediate/best_practices.html">Best Practices</a>
  119. </li>
  120. <li class="nav-item" data-depth="4">
  121. <a class="nav-link" href="../intermediate/simpleapplication.html">Simple Application</a>
  122. </li>
  123. <li class="nav-item" data-depth="4">
  124. <a class="nav-link" href="../features.html">Features</a>
  125. </li>
  126. <li class="nav-item" data-depth="4">
  127. <a class="nav-link" href="../intermediate/optimization.html">Optimization</a>
  128. </li>
  129. <li class="nav-item" data-depth="4">
  130. <a class="nav-link" href="../faq.html">FAQ</a>
  131. </li>
  132. </ul>
  133. </li>
  134. <li class="nav-item" data-depth="3">
  135. <button class="nav-item-toggle"></button>
  136. <span class="nav-text">Math Concepts</span>
  137. <ul class="nav-list">
  138. <li class="nav-item" data-depth="4">
  139. <a class="nav-link" href="../math_for_dummies.html">Math For Dummies</a>
  140. </li>
  141. <li class="nav-item" data-depth="4">
  142. <a class="nav-link" href="../intermediate/math.html">Math</a>
  143. </li>
  144. <li class="nav-item" data-depth="4">
  145. <a class="nav-link" href="../math.html">More Math</a>
  146. </li>
  147. <li class="nav-item" data-depth="4">
  148. <a class="nav-link" href="../rotate.html">Rotate</a>
  149. </li>
  150. <li class="nav-item" data-depth="4">
  151. <a class="nav-link" href="../math_video_tutorials.html">Math Video Tutorials</a>
  152. </li>
  153. </ul>
  154. </li>
  155. <li class="nav-item" data-depth="3">
  156. <button class="nav-item-toggle"></button>
  157. <span class="nav-text">3D Graphics Concepts</span>
  158. <ul class="nav-list">
  159. <li class="nav-item" data-depth="4">
  160. <a class="nav-link" href="../intermediate/multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a>
  161. </li>
  162. <li class="nav-item" data-depth="4">
  163. <a class="nav-link" href="../scenegraph_for_dummies.html">Scenegraph for Dummies</a>
  164. </li>
  165. <li class="nav-item" data-depth="4">
  166. <a class="nav-link" href="../beginner/hellovector.html">Hello Vector</a>
  167. </li>
  168. <li class="nav-item" data-depth="4">
  169. <a class="nav-link" href="../terminology.html">Terminology</a>
  170. </li>
  171. <li class="nav-item" data-depth="4">
  172. <a class="nav-link" href="../intermediate/how_to_use_materials.html">How to Use Materials</a>
  173. </li>
  174. <li class="nav-item" data-depth="4">
  175. <a class="nav-link" href="../intermediate/transparency_sorting.html">Transparency and Sorting</a>
  176. </li>
  177. <li class="nav-item" data-depth="4">
  178. <a class="nav-link" href="../external/blender.html">Importing from Blender</a>
  179. </li>
  180. <li class="nav-item" data-depth="4">
  181. <a class="nav-link" href="../external/3dsmax.html">Importing from 3DS Max</a>
  182. </li>
  183. </ul>
  184. </li>
  185. </ul>
  186. </li>
  187. </ul>
  188. </li>
  189. <li class="nav-item" data-depth="1">
  190. <a class="nav-link" href="../../logo.html">Logo Usage</a>
  191. </li>
  192. <li class="nav-item" data-depth="1">
  193. <a class="nav-link" href="../../bsd_license.html">License</a>
  194. </li>
  195. <li class="nav-item" data-depth="1">
  196. <a class="nav-link" href="../../github_tips.html">Github Tips</a>
  197. </li>
  198. </ul>
  199. </li>
  200. <li class="nav-item" data-depth="0">
  201. <button class="nav-item-toggle"></button>
  202. <span class="nav-text">SDK</span>
  203. <ul class="nav-list">
  204. <li class="nav-item" data-depth="1">
  205. <a class="nav-link" href="../../sdk.html">jMonkeyEngine SDK</a>
  206. </li>
  207. </ul>
  208. </li>
  209. </ul>
  210. </nav>
  211. </div>
  212. <div class="nav-panel-explore" data-panel="explore">
  213. <div class="context">
  214. <span class="title">Docs</span>
  215. <span class="version">master</span>
  216. </div>
  217. <ul class="components">
  218. <li class="component is-current">
  219. <span class="title">Docs</span>
  220. <ul class="versions">
  221. <li class="version is-current is-latest">
  222. <a href="../../documentation.html">master</a>
  223. </li>
  224. </ul>
  225. </li>
  226. <li class="component">
  227. <span class="title">Wiki UI</span>
  228. <ul class="versions">
  229. <li class="version is-latest">
  230. <a href="../../../wiki-ui/index.html">master</a>
  231. </li>
  232. </ul>
  233. </li>
  234. </ul>
  235. </div>
  236. </div>
  237. </aside>
  238. </div>
  239. <main class="article">
  240. <div class="toolbar" role="navigation">
  241. <button class="nav-toggle"></button>
  242. <nav class="breadcrumbs" aria-label="breadcrumbs">
  243. <ul>
  244. <li><a href="../../documentation.html">Docs</a></li>
  245. <li><a href="bullet_multithreading.html">Multithreading Bullet Physics in jme3</a></li>
  246. </ul>
  247. </nav>
  248. <div class="edit-this-page"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/docs/modules/ROOT/pages/jme3/advanced/bullet_multithreading.adoc">Edit this Page</a></div>
  249. </div>
  250. <div class="content">
  251. <article class="doc">
  252. <h1 class="page">Multithreading Bullet Physics in jme3</h1>
  253. <div class="sect1">
  254. <h2 id="introduction"><a class="anchor" href="#introduction"></a>Introduction</h2>
  255. <div class="sectionbody">
  256. <div class="paragraph">
  257. <p>Since bullet is not (yet) multithreaded or GPU accelerated, the jME3 implementation allows to run each physics space on a separate thread that is executed in parallel to rendering.</p>
  258. </div>
  259. </div>
  260. </div>
  261. <div class="sect1">
  262. <h2 id="how-is-it-handled-in-jme3-and-bullet"><a class="anchor" href="#how-is-it-handled-in-jme3-and-bullet"></a>How is it handled in jme3 and bullet?</h2>
  263. <div class="sectionbody">
  264. <div class="paragraph">
  265. <p>A SimpleApplication with a BulletAppState allows setting the threading type via</p>
  266. </div>
  267. <div class="listingblock">
  268. <div class="content">
  269. <pre class="highlightjs highlight"><code>setThreadingType(ThreadingType type);</code></pre>
  270. </div>
  271. </div>
  272. <div class="literalblock">
  273. <div class="content">
  274. <pre>where ThreadingType can be either SEQUENTIAL or PARALLEL. By default, it's SEQUENTIAL.</pre>
  275. </div>
  276. </div>
  277. <div class="paragraph">
  278. <p>You can activate PARALLEL threading in the simpleInitApp() method:</p>
  279. </div>
  280. <div class="listingblock">
  281. <div class="content">
  282. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">bulletAppState = new BulletAppState();
  283. bulletAppState.setThreadingType(BulletAppState.ThreadingType.PARALLEL);
  284. stateManager.attach(bulletAppState);</code></pre>
  285. </div>
  286. </div>
  287. <div class="paragraph">
  288. <p>Now the physics update happens in parallel to render(), that is, after the user&#8217;s changes in the update() call have been applied. During update() the physics update loop pauses. This way the loop logic is still maintained: the user can set and change values in physics and scenegraph objects before render() and physicsUpdate() are called in parallel. This allows you to use physics methods in update() as if it was single-threaded.</p>
  289. </div>
  290. <table class="tableblock frame-all grid-all stretch">
  291. <colgroup>
  292. <col style="width: 50%;">
  293. <col style="width: 50%;">
  294. </colgroup>
  295. <thead>
  296. <tr>
  297. <th class="tableblock halign-left valign-top">PARALLEL</th>
  298. <th class="tableblock halign-left valign-top">SEQUENTIAL</th>
  299. </tr>
  300. </thead>
  301. <tbody>
  302. <tr>
  303. <td class="tableblock halign-left valign-top"><div class="content"><div class="olist arabic">
  304. <ol class="arabic">
  305. <li>
  306. <p>update(), 2. render() and physics update().</p>
  307. </li>
  308. </ol>
  309. </div></div></td>
  310. <td class="tableblock halign-left valign-top"><div class="content"><div class="olist arabic">
  311. <ol class="arabic">
  312. <li>
  313. <p>update(), 2. render(), 3. physics update().</p>
  314. </li>
  315. </ol>
  316. </div></div></td>
  317. </tr>
  318. <tr>
  319. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  320. <p>Physics Debug View is rendered inaccurately (out of sync)</p>
  321. </div></div></td>
  322. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  323. <p>Physics Debug View is rendered accurately.</p>
  324. </div></div></td>
  325. </tr>
  326. </tbody>
  327. </table>
  328. <div class="admonitionblock tip">
  329. <table>
  330. <tr>
  331. <td class="icon">
  332. <i class="fa icon-tip" title="Tip"></i>
  333. </td>
  334. <td class="content">
  335. <div class="paragraph">
  336. <p>You can add more physics spaces by using multiple PARALLEL bulletAppStates. You would do that if you have sets physical objects that never collide (for example, underground bolders and flying cannon balls above ground), so you put those into separate physics spaces, which improves performances (less collisions to check!).</p>
  337. </div>
  338. </td>
  339. </tr>
  340. </table>
  341. </div>
  342. </div>
  343. </div>
  344. </article>
  345. <aside class="toc sidebar" data-title="Contents" data-levels="2">
  346. <div class="toc-menu"></div>
  347. </aside>
  348. </div>
  349. </main>
  350. </div>
  351. <footer class="footer">
  352. <p>Copyright 2020 jMonkeyEngine Wiki Contributors. Licensed BSD-3.</p>
  353. </footer>
  354. <script src="../../../_/js/site.js"></script>
  355. <script async src="../../../_/js/vendor/highlight.js"></script>
  356. </body>
  357. </html>