<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.5"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Zibra Effects: Assets/Plugins/Zibra/Smoke and Fire/Scripts/Solver/ZibraSmokeAndFire.cs Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js.txt"></script>
<script type="text/javascript" src="dynsections.js.txt"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js.txt"></script>
<script type="text/javascript" src="search/search.js.txt"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Zibra Effects
   </div>
   <div id="projectbrief">Real-time Simulated Visual Effects</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.5 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js.txt"></script>
<script type="text/javascript" src="menu.js.txt"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_f5412708edd60def94041247c0b8603c.html">Assets</a></li><li class="navelem"><a class="el" href="dir_beed702047ef9680d64a7ee349fab51c.html">Plugins</a></li><li class="navelem"><a class="el" href="dir_4f506dc541fc7401bbbeb99f1cec82f2.html">Zibra</a></li><li class="navelem"><a class="el" href="dir_6260800d71610873009c61f02e22fc45.html">Smoke and Fire</a></li><li class="navelem"><a class="el" href="dir_7e40387fec42afec1b430a50221db81e.html">Scripts</a></li><li class="navelem"><a class="el" href="dir_8e2e99f52e3d4ea4889a7be2dc03c652.html">Solver</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle"><div class="title">ZibraSmokeAndFire.cs</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="keyword">using </span><a class="code hl_namespace" href="namespacecom_1_1zibra_1_1smoke__and__fire_1_1_data_structures.html">com.zibra.smoke_and_fire.DataStructures</a>;</div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="keyword">using </span><a class="code hl_namespace" href="namespacecom_1_1zibra_1_1smoke__and__fire_1_1_manipulators.html">com.zibra.smoke_and_fire.Manipulators</a>;</div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="keyword">using </span><a class="code hl_namespace" href="namespacecom_1_1zibra_1_1common_1_1_utilities.html">com.zibra.common.Utilities</a>;</div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="keyword">using </span>System;</div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="keyword">using </span>System.Collections.Generic;</div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="keyword">using </span>System.Collections.ObjectModel;</div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="keyword">using </span>System.Runtime.InteropServices;</div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="keyword">using </span>UnityEngine;</div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="keyword">using </span>UnityEngine.Experimental.Rendering;</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="keyword">using </span>UnityEngine.Rendering;</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="keyword">using </span><a class="code hl_namespace" href="namespacecom_1_1zibra_1_1smoke__and__fire_1_1_utilities.html">com.zibra.smoke_and_fire.Utilities</a>;</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="keyword">using </span><a class="code hl_namespace" href="namespacecom_1_1zibra_1_1smoke__and__fire_1_1_bridge.html">com.zibra.smoke_and_fire.Bridge</a>;</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="keyword">using </span><a class="code hl_namespace" href="namespacecom_1_1zibra_1_1common_1_1_s_d_f_objects.html">com.zibra.common.SDFObjects</a>;</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="keyword">using </span>UnityEngine.Serialization;</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span> </div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="preprocessor">#if UNITY_EDITOR</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="keyword">using </span><a class="code hl_namespace" href="namespacecom_1_1zibra_1_1smoke__and__fire_1_1_analytics.html">com.zibra.smoke_and_fire.Analytics</a>;</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="keyword">using </span><a class="code hl_namespace" href="namespacecom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects.html">com.zibra.common.Editor.SDFObjects</a>;</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#if UNITY_PIPELINE_HDRP</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span><span class="keyword">using </span>UnityEngine.Rendering.HighDefinition;</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#endif </span><span class="comment">// UNITY_PIPELINE_HDRP</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacecom_1_1zibra_1_1smoke__and__fire_1_1_solver.html">com.zibra.smoke_and_fire.Solver</a></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span>{</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>    [AddComponentMenu(<span class="stringliteral">&quot;Zibra Effects - Smoke &amp; Fire/Zibra Smoke &amp; Fire&quot;</span>)]</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>    [RequireComponent(typeof(<a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html">ZibraSmokeAndFireMaterialParameters</a>))]</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>    [RequireComponent(typeof(<a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html">ZibraSmokeAndFireSolverParameters</a>))]</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>    [RequireComponent(typeof(ZibraManipulatorManager))]</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>    [ExecuteInEditMode]</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html">   60</a></span>    <span class="keyword">public</span> <span class="keyword">class </span><a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html">ZibraSmokeAndFire</a> : MonoBehaviour</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>    {</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span><span class="preprocessor">#region Public Interface</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span><span class="preprocessor">#region Properties</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ae6f6139d03c6cb1987d13cac50d24523">   67</a></span>        <span class="keyword">public</span> <span class="keyword">static</span> List&lt;ZibraSmokeAndFire&gt; <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ae6f6139d03c6cb1987d13cac50d24523">AllInstances</a> = <span class="keyword">new</span> List&lt;ZibraSmokeAndFire&gt;();</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span> </div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a2c385f642822975febcc3c48fb9605bd">   72</a></span>        <span class="keyword">public</span> <span class="keyword">enum</span> <a class="code hl_enumeration" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a2c385f642822975febcc3c48fb9605bd">SimulationMode</a></div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>        {</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>            Smoke,</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>            ColoredSmoke,</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>            Fire,</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>        }</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span> </div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>        [Tooltip(<span class="stringliteral">&quot;Setting that determines the type of simulation being performed.&quot;</span>)]</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ac4792d27f7e5e4a3fc2337191231011a">  103</a></span>        <span class="keyword">public</span> <a class="code hl_enumeration" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a2c385f642822975febcc3c48fb9605bd">SimulationMode</a> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ac4792d27f7e5e4a3fc2337191231011a">CurrentSimulationMode</a> = <a class="code hl_enumeration" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a2c385f642822975febcc3c48fb9605bd">SimulationMode</a>.Fire;</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span> </div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6d4293288031a149d20f7884389e1505">  118</a></span>        <span class="keyword">public</span> <a class="code hl_enumeration" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a2c385f642822975febcc3c48fb9605bd">SimulationMode</a> <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6d4293288031a149d20f7884389e1505">ActiveSimulationMode</a> { <span class="keyword">get</span>; <span class="keyword">private</span> <span class="keyword">set</span>; }</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span> </div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#abe78de671d42526358a0d4fa561437bc">  123</a></span>        <span class="keyword">public</span> <span class="keywordtype">float</span> <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#abe78de671d42526358a0d4fa561437bc">LastTimestep</a> { <span class="keyword">get</span>; <span class="keyword">private</span> <span class="keyword">set</span>; } = 0.0f;</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span> </div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a7f55e56e8e512bd64f9f5aa3ed880ccb">  128</a></span>        <span class="keyword">public</span> <span class="keywordtype">float</span> <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a7f55e56e8e512bd64f9f5aa3ed880ccb">SimulationInternalTime</a> { <span class="keyword">get</span>; <span class="keyword">private</span> <span class="keyword">set</span>; } = 0.0f;</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span> </div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ab372eb0691785420d7d9f5f9a6fad33b">  133</a></span>        <span class="keyword">public</span> <span class="keywordtype">int</span> <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ab372eb0691785420d7d9f5f9a6fad33b">SimulationInternalFrame</a> { <span class="keyword">get</span>; <span class="keyword">private</span> <span class="keyword">set</span>; } = 0;</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span> </div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">  138</a></span>        <span class="keyword">public</span> Vector3Int <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a> { <span class="keyword">get</span>; <span class="keyword">private</span> <span class="keyword">set</span>; }</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span> </div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>        [Tooltip(</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>            <span class="stringliteral">&quot;Directional light that will be used for Smoke &amp; Fire lighting. Must be set, otherwise simulation will not start. Can be freely modified at runtime.&quot;</span>)]</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>        [FormerlySerializedAs(<span class="stringliteral">&quot;mainLight&quot;</span>)]</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a513906c0545ef4c34563175adb79277f">  154</a></span>        <span class="keyword">public</span> Light <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a513906c0545ef4c34563175adb79277f">MainLight</a>;</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span> </div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span>        [Tooltip(</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span>            <span class="stringliteral">&quot;List of point lights that contribute to Smoke &amp; Fire lighting. Can be freely modified at runtime. You can add up to 16 lights to that list.&quot;</span>)]</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span>        [FormerlySerializedAs(<span class="stringliteral">&quot;lights&quot;</span>)]</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a8fd6b7f69ecca3dc73e75ccb30100de4">  170</a></span>        <span class="keyword">public</span> List&lt;Light&gt; <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a8fd6b7f69ecca3dc73e75ccb30100de4">Lights</a>;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span> </div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span>        [Tooltip(<span class="stringliteral">&quot;Timestep used in each simulation iteration.&quot;</span>)]</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span>        [Range(0.0f, 3.0f)]</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span>        [FormerlySerializedAs(<span class="stringliteral">&quot;TimeStep&quot;</span>)]</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span>        [FormerlySerializedAs(<span class="stringliteral">&quot;timeStep&quot;</span>)]</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a57b3ef4623ad89b62fe4f32ef9de669f">  179</a></span>        <span class="keyword">public</span> <span class="keywordtype">float</span> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a57b3ef4623ad89b62fe4f32ef9de669f">Timestep</a> = 1.00f;</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span> </div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span>        [Tooltip(<span class="stringliteral">&quot;Fallback max frame latency. Used when it isn&#39;t possible to retrieve Unity&#39;s max frame latency.&quot;</span>)]</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span>        [Range(2, 16)]</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a3388dde8463171695ffbfbf8902384c6">  197</a></span>        <span class="keyword">public</span> UInt32 <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a3388dde8463171695ffbfbf8902384c6">MaxFramesInFlight</a> = 3;</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span> </div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>        [Tooltip(<span class="stringliteral">&quot;Number of simulation iterations per simulation frame.&quot;</span>)]</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>        [Range(1, 10)]</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af20b00f33a5e5c39d46a5c26fd4c92f9">  210</a></span>        <span class="keyword">public</span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af20b00f33a5e5c39d46a5c26fd4c92f9">SimulationIterations</a> = 3;</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span> </div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0a35bae3070e845517bfcfb64688f2ca">  215</a></span>        <span class="keyword">public</span> <span class="keywordtype">float</span> <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0a35bae3070e845517bfcfb64688f2ca">CellSize</a> { <span class="keyword">get</span>; <span class="keyword">private</span> <span class="keyword">set</span>; }</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span> </div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span>        [Tooltip(<span class="stringliteral">&quot;Sets the resolution of the largest side of the grids container equal to this value&quot;</span>)]</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span>        [Min(16)]</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span>        [FormerlySerializedAs(<span class="stringliteral">&quot;gridResolution&quot;</span>)]</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a5471ff6648f72a9e172b87554fd6c1b3">  232</a></span>        <span class="keyword">public</span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a5471ff6648f72a9e172b87554fd6c1b3">GridResolution</a> = 128;</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno">  233</span> </div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span>        [Tooltip(</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span>            <span class="stringliteral">&quot;Freezes simulation when disabled. Also decreases performance cost when disabled, since simulation won�t run. Disabling this option does not prevent simulation from rendering.&quot;</span>)]</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span>        [FormerlySerializedAs(<span class="stringliteral">&quot;runSimulation&quot;</span>)]</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adbe358a3fdd13a7e7cea1a30b81cbe57">  248</a></span>        <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adbe358a3fdd13a7e7cea1a30b81cbe57">RunSimulation</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno">  249</span> </div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno">  261</span>        [Tooltip(</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno">  262</span>            <span class="stringliteral">&quot;Enables rendering of the smoke/fire. Disabling rendering decreases performance cost. Disabling this option does not prevent simulation from running.&quot;</span>)]</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno">  263</span>        [FormerlySerializedAs(<span class="stringliteral">&quot;runRendering&quot;</span>)]</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af7aa989f02edf945bd79a0fd1feab791">  264</a></span>        <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af7aa989f02edf945bd79a0fd1feab791">RunRendering</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno">  265</span> </div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno">  273</span>        [Tooltip(</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno">  274</span>            <span class="stringliteral">&quot;When enabled, moving simulation volume will not disturb simulation. When disabled, smoke/fire will try to stay in place in world space. If you want to move the simulation around the scene, you want to disable this option.&quot;</span>)]</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno">  275</span>        [FormerlySerializedAs(<span class="stringliteral">&quot;fixVolumeWorldPosition&quot;</span>)]</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af1d6faf266c7e9c47ff8d56c50994d7e">  276</a></span>        <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af1d6faf266c7e9c47ff8d56c50994d7e">FixVolumeWorldPosition</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno">  277</span> </div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">  281</a></span>        <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a> { <span class="keyword">get</span>; <span class="keyword">private</span> <span class="keyword">set</span>; } = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno">  282</span> </div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno">  286</span>        [Tooltip(<span class="stringliteral">&quot;Allows you to render Smoke &amp; Fire in lower resolution.&quot;</span>)]</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">  287</a></span>        <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">EnableDownscale</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno">  288</span> </div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno">  300</span>        [Range(0.2f, 0.99f)]</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno">  301</span>        [Tooltip(<span class="stringliteral">&quot;Scale width/height of smoke &amp; fire render.&quot;</span>)]</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6183f87b169d9690a53e7312507c2a42">  302</a></span>        <span class="keyword">public</span> <span class="keywordtype">float</span> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6183f87b169d9690a53e7312507c2a42">DownscaleFactor</a> = 0.5f;</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno">  303</span> </div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno">  307</span>        [Tooltip(<span class="stringliteral">&quot;Size of the simulation volume.&quot;</span>)]</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno">  308</span>        [FormerlySerializedAs(<span class="stringliteral">&quot;containerSize&quot;</span>)]</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">  309</a></span>        <span class="keyword">public</span> Vector3 <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a> = <span class="keyword">new</span> Vector3(5, 5, 5);</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno">  310</span> </div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a60f1ebf5864cafb3a02fb0441724bb71">  314</a></span>        <span class="keyword">public</span> Vector3 <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a60f1ebf5864cafb3a02fb0441724bb71">SimulationContainerPosition</a>;</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno">  315</span> </div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno">  319</span>        [Tooltip(<span class="stringliteral">&quot;Injection point used for BRP render&quot;</span>)]</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a96a6f56e74c3c80dbbc8676e313bdd94">  320</a></span>        <span class="keyword">public</span> CameraEvent <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a96a6f56e74c3c80dbbc8676e313bdd94">CurrentInjectionPoint</a> = CameraEvent.BeforeForwardAlpha;</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno">  321</span> </div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno">  325</span>        [Tooltip(<span class="stringliteral">&quot;Whether to limit maximum number of smoke simulation iterations per second.&quot;</span>)]</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#afcac8381e4e2985d8950aa58684e852a">  326</a></span>        <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#afcac8381e4e2985d8950aa58684e852a">LimitFramerate</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno">  327</span> </div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno">  334</span>        [Min(0.0f)]</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ad2ec1cd6873831fe75a9de4b2f6416cd">  335</a></span>        <span class="keyword">public</span> <span class="keywordtype">float</span> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ad2ec1cd6873831fe75a9de4b2f6416cd">MaximumFramerate</a> = 60.0f;</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno">  336</span> </div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">  340</a></span>        <span class="keyword">public</span> <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html">ZibraSmokeAndFireSolverParameters</a> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>;</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno">  341</span> </div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">  345</a></span>        <span class="keyword">public</span> <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html">ZibraSmokeAndFireMaterialParameters</a> <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>;</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno">  346</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno">  347</span> </div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a03f1d1aa875dc4704958831ef7eaea9d">  351</a></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a03f1d1aa875dc4704958831ef7eaea9d">StopSolver</a>()</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno">  352</span>        {</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno">  353</span>            <span class="keywordflow">if</span> (!<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a>)</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno">  354</span>            {</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno">  355</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno">  356</span>            }</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno">  357</span> </div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno">  358</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno">  359</span>            ClearRendering();</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno">  360</span>            ClearSolver();</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno">  361</span> </div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno">  362</span>            <span class="comment">// If ZibraSmokeAndFire object gets disabled/destroyed</span></div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno">  363</span>            <span class="comment">// We still may need to do cleanup few frames later</span></div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno">  364</span>            <span class="comment">// So we create new gameobject which allows us to run cleanup code</span></div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno">  365</span>            ZibraSmokeAndFireGPUGarbageCollector.CreateGarbageCollector();</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno">  366</span>        }</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno">  367</span> </div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a7a7e7d8a5040cee41196e023a9c05060">  375</a></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a7a7e7d8a5040cee41196e023a9c05060">RemoveManipulator</a>(<a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html">Manipulator</a> manipulator)</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno">  376</span>        {</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno">  377</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a>)</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno">  378</span>            {</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno">  379</span>                Debug.LogWarning(<span class="stringliteral">&quot;We don&#39;t yet support changing number of manipulators/colliders at runtime.&quot;</span>);</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno">  380</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno">  381</span>            }</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno">  382</span> </div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno">  383</span>            <span class="keywordflow">if</span> (Manipulators.Contains(manipulator))</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno">  384</span>            {</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno">  385</span>                Manipulators.Remove(manipulator);</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno">  386</span>                Manipulators.Sort(<span class="keyword">new</span> <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator_compare.html">ManipulatorCompare</a>());</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno">  387</span><span class="preprocessor">#if UNITY_EDITOR</span></div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno">  388</span>                UnityEditor.EditorUtility.SetDirty(<span class="keyword">this</span>);</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno">  389</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno">  390</span>            }</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno">  391</span>        }</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno">  392</span> </div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#aa58f899ad5137c8dd72d88a57a699227">  396</a></span>        <span class="keyword">public</span> ReadOnlyCollection&lt;Manipulator&gt; <a class="code hl_function" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#aa58f899ad5137c8dd72d88a57a699227">GetManipulatorList</a>()</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno">  397</span>        {</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno">  398</span>            <span class="keywordflow">return</span> Manipulators.AsReadOnly();</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno">  399</span>        }</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno">  400</span> </div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#aac0ad2411b42670e36cc79a9865e6a95">  404</a></span>        <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#aac0ad2411b42670e36cc79a9865e6a95">HasManipulator</a>(<a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html">Manipulator</a> manipulator)</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno">  405</span>        {</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno">  406</span>            <span class="keywordflow">return</span> Manipulators.Contains(manipulator);</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno">  407</span>        }</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno">  408</span> </div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6727531d04632327e5aa53292d37b73b">  416</a></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6727531d04632327e5aa53292d37b73b">AddManipulator</a>(<a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html">Manipulator</a> manipulator)</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno">  417</span>        {</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno">  418</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a>)</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno">  419</span>            {</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno">  420</span>                Debug.LogWarning(<span class="stringliteral">&quot;We don&#39;t yet support changing number of manipulators/colliders at runtime.&quot;</span>);</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno">  421</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno">  422</span>            }</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno">  423</span> </div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno">  424</span>            <span class="keywordflow">if</span> (!Manipulators.Contains(manipulator))</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno">  425</span>            {</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno">  426</span>                Manipulators.Add(manipulator);</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno">  427</span>                Manipulators.Sort(<span class="keyword">new</span> <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator_compare.html">ManipulatorCompare</a>());</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno">  428</span><span class="preprocessor">#if UNITY_EDITOR</span></div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno">  429</span>                UnityEditor.EditorUtility.SetDirty(<span class="keyword">this</span>);</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno">  430</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno">  431</span>            }</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno">  432</span>        }</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno">  433</span> </div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a4746d9bc10cb2d1892167d68570f20d3">  441</a></span>        <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a4746d9bc10cb2d1892167d68570f20d3">HasEmitter</a>()</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno">  442</span>        {</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno">  443</span>            <span class="keywordflow">foreach</span> (var manipulator <span class="keywordflow">in</span> Manipulators)</div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno">  444</span>            {</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno">  445</span>                <span class="keywordflow">if</span> (manipulator.GetManipulatorType() == <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html">Manipulator</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html#a57c404a5c07698ea543d2d900d60c282">ManipulatorType</a>.Emitter ||</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno">  446</span>                    manipulator.GetManipulatorType() == <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html">Manipulator</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html#a57c404a5c07698ea543d2d900d60c282">ManipulatorType</a>.TextureEmitter)</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno">  447</span>                {</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno">  448</span>                    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno">  449</span>                }</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno">  450</span>            }</div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno">  451</span> </div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno">  452</span>            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno">  453</span>        }</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno">  454</span> </div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a5dc665c2e65c71491cb7a92a3db572be">  468</a></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a5dc665c2e65c71491cb7a92a3db572be">UpdateGridSize</a>()</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno">  469</span>        {</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno">  470</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a>)</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno">  471</span>            {</div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno">  472</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno">  473</span>            }</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno">  474</span> </div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno">  475</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0a35bae3070e845517bfcfb64688f2ca">CellSize</a> = Math.Max(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>.x, Math.Max(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>.y, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>.z)) / <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a5471ff6648f72a9e172b87554fd6c1b3">GridResolution</a>;</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno">  476</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a> = 8 * Vector3Int.CeilToInt(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a> / (8.0f * <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0a35bae3070e845517bfcfb64688f2ca">CellSize</a>));</div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno">  477</span>            NumNodes = <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>[0] * <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>[1] * <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>[2];</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno">  478</span>            GridDownscale = (int)Mathf.Ceil(</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno">  479</span>                1.0f / Mathf.Max(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a509147db4aef684fc27ee758480b480f">ShadowResolution</a>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a027137114f1de5ad423f1d5a5d23e462">IlluminationResolution</a>));</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno">  480</span>            GridSizeLOD = LODGridSize(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, GridDownscale);</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno">  481</span>        }</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno">  482</span> </div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno">  483</span><span class="preprocessor">#if UNITY_EDITOR</span></div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a08c0566c1c813868227dbde1574e2437">  493</a></span>        <span class="keyword">public</span> <span class="keyword">event</span> Action <a class="code hl_event" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a08c0566c1c813868227dbde1574e2437">OnChanged</a>;</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno">  494</span> </div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"><a class="line" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0af557e93137dbb3358b82ad34849b49">  501</a></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0af557e93137dbb3358b82ad34849b49">NotifyChange</a>()</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno">  502</span>        {</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno">  503</span>            <span class="keywordflow">if</span> (<a class="code hl_event" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a08c0566c1c813868227dbde1574e2437">OnChanged</a> != <span class="keyword">null</span>)</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno">  504</span>            {</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno">  505</span>                <a class="code hl_event" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a08c0566c1c813868227dbde1574e2437">OnChanged</a>.Invoke();</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno">  506</span>            }</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno">  507</span>        }</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno">  508</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno">  509</span> </div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno">  510</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno">  511</span> </div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno">  512</span><span class="preprocessor">#region Implementation details</span></div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno">  513</span><span class="preprocessor">#region Constants</span></div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno">  514</span>        <span class="keyword">internal</span> <span class="keyword">const</span> <span class="keywordtype">int</span> STATISTICS_PER_MANIPULATOR = 12;</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno">  515</span>        <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">int</span> WORKGROUP_SIZE_X = 8;</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno">  516</span>        <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">int</span> WORKGROUP_SIZE_Y = 8;</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno">  517</span>        <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">int</span> WORKGROUP_SIZE_Z = 6;</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno">  518</span>        <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">int</span> PARTICLE_WORKGROUP = 256;</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno">  519</span>        <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">int</span> DEPTH_COPY_WORKGROUP = 16;</div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno">  520</span>        <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">int</span> TEXTURE3D_CLEAR_GROUPSIZE = 4;</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno">  521</span>        <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">int</span> MAX_LIGHT_COUNT = 16;</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno">  522</span>        <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">int</span> RANDOM_TEX_SIZE = 64;</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno">  523</span>        <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">int</span> EMITTER_GRADIENT_TEX_WIDTH = 48;</div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno">  524</span>        <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">int</span> EMITTER_SPRITE_TEX_SIZE = 64;</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno">  525</span>        <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">float</span> EMITTER_PARTICLE_SIZE_SCALE = .1f;</div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno">  526</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno">  527</span> </div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno">  528</span><span class="preprocessor">#region Resources</span></div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno">  529</span>        <span class="keyword">private</span> RenderTexture UpscaleColor;</div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno">  530</span>        <span class="keyword">private</span> RenderTexture Shadowmap;</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno">  531</span>        <span class="keyword">private</span> RenderTexture Lightmap;</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno">  532</span>        <span class="keyword">private</span> RenderTexture CameraOcclusion;</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno">  533</span>        <span class="keyword">private</span> RenderTexture RenderDensity;</div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno">  534</span>        <span class="keyword">private</span> RenderTexture RenderDensityLOD;</div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno">  535</span>        <span class="keyword">private</span> RenderTexture RenderColor;</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno">  536</span>        <span class="keyword">private</span> RenderTexture RenderIllumination;</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno">  537</span>        <span class="keyword">private</span> RenderTexture ColorTexture0;</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno">  538</span>        <span class="keyword">private</span> RenderTexture VelocityTexture0;</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno">  539</span>        <span class="keyword">private</span> RenderTexture ColorTexture1;</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno">  540</span>        <span class="keyword">private</span> RenderTexture VelocityTexture1;</div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno">  541</span>        <span class="keyword">private</span> RenderTexture TmpSDFTexture;</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno">  542</span>        <span class="keyword">private</span> RenderTexture Divergence;</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno">  543</span>        <span class="keyword">private</span> RenderTexture ResidualLOD0;</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno">  544</span>        <span class="keyword">private</span> RenderTexture ResidualLOD1;</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno">  545</span>        <span class="keyword">private</span> RenderTexture ResidualLOD2;</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno">  546</span>        <span class="keyword">private</span> RenderTexture Pressure0LOD0;</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno">  547</span>        <span class="keyword">private</span> RenderTexture Pressure0LOD1;</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno">  548</span>        <span class="keyword">private</span> RenderTexture Pressure0LOD2;</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno">  549</span>        <span class="keyword">private</span> RenderTexture Pressure1LOD0;</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno">  550</span>        <span class="keyword">private</span> RenderTexture Pressure1LOD1;</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno">  551</span>        <span class="keyword">private</span> RenderTexture Pressure1LOD2;</div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno">  552</span>        <span class="keyword">private</span> ComputeBuffer AtomicCounters;</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno">  553</span>        <span class="keyword">private</span> ComputeBuffer EffectParticleData0;</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno">  554</span>        <span class="keyword">private</span> ComputeBuffer EffectParticleData1;</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno">  555</span>        <span class="keyword">private</span> Texture3D RandomTexture;</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno">  556</span>        <span class="keyword">private</span> RenderTexture DepthTexture;</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno">  557</span>        <span class="keyword">private</span> RenderTexture ParticlesRT;</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno">  558</span>        <span class="keyword">private</span> ComputeBuffer DynamicManipulatorData;</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno">  559</span>        <span class="keyword">private</span> ComputeBuffer SDFObjectData;</div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno">  560</span>        <span class="keyword">private</span> ComputeBuffer ManipulatorStatistics;</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno">  561</span>        <span class="keyword">private</span> Texture3D SDFGridTexture;</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno">  562</span>        <span class="keyword">private</span> Texture3D EmbeddingsTexture;</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno">  563</span>        <span class="keyword">private</span> Texture2D EmittersColorsTexture;</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno">  564</span>        <span class="keyword">private</span> Texture2D EmittersColorsStagingTexture;</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno">  565</span>        <span class="keyword">private</span> Texture3D EmittersSpriteTexture;</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno">  566</span> </div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno">  567</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> ShadowmapID;</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno">  568</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> LightmapID;</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno">  569</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> IlluminationID;</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno">  570</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> CopyDepthID;</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno">  571</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> ClearTexture3DFloatID;</div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno">  572</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> ClearTexture3DFloat2ID;</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno">  573</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> ClearTexture3DFloat3ID;</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno">  574</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> ClearTexture3DFloat4ID;</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno">  575</span>        <span class="keyword">private</span> Vector3Int WorkGroupsXYZ;</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno">  576</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> MaxEffectParticleWorkgroups;</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno">  577</span>        <span class="keyword">private</span> Vector3Int ShadowGridSize;</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno">  578</span>        <span class="keyword">private</span> Vector3Int ShadowWorkGroupsXYZ;</div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno">  579</span>        <span class="keyword">private</span> Vector3Int LightGridSize;</div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno">  580</span>        <span class="keyword">private</span> Vector3Int LightWorkGroupsXYZ;</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno">  581</span>        <span class="keyword">private</span> Vector3Int DownscaleXYZ;</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno">  582</span>        <span class="keyword">private</span> Mesh renderQuad;</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno">  583</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> CurrentInstanceID;</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno">  584</span>        <span class="keyword">private</span> CommandBuffer solverCommandBuffer;</div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno">  585</span> </div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno">  586</span>        <span class="keyword">private</span> <span class="keywordtype">bool</span> ForceRepaint = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno">  587</span>        <span class="keyword">private</span> <span class="keywordtype">bool</span> isSimulationContainerPositionChanged;</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno">  588</span>        <span class="keyword">private</span> <span class="keywordtype">float</span> timeAccumulation = 0.0f;</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno">  589</span>        <span class="keyword">private</span> <span class="keywordtype">bool</span> forceTextureUpdate = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno">  590</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> GridDownscale = 1;</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno">  591</span>        <span class="keyword">internal</span> <span class="keywordtype">int</span> NumNodes;</div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno">  592</span> </div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno">  593</span>        <span class="keyword">private</span> Vector3Int GridSizeLOD;</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno">  594</span> </div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno">  595</span>        <span class="keyword">private</span> CameraEvent ActiveInjectionPoint = CameraEvent.BeforeForwardAlpha;</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno">  596</span>        [SerializeField]</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno">  597</span>        [FormerlySerializedAs(<span class="stringliteral">&quot;manipulators&quot;</span>)]</div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno">  598</span>        <span class="keyword">private</span> List&lt;Manipulator&gt; Manipulators = <span class="keyword">new</span> List&lt;Manipulator&gt;();</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno">  599</span>        [HideInInspector]</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno">  600</span>        [SerializeField]</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno">  601</span>        <span class="keyword">private</span> ZibraManipulatorManager ManipulatorManager;</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno">  602</span> </div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno">  603</span>        <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">int</span> ms_NextInstanceId = 0;</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno">  604</span> </div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno">  605</span><span class="preprocessor">#if UNITY_PIPELINE_URP</span></div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno">  606</span>        <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">int</span> upscaleColorTextureID = Shader.PropertyToID(<span class="stringliteral">&quot;Zibra_DownscaledSmokeAndFireColor&quot;</span>);</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno">  607</span>        <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">int</span> upscaleDepthTextureID = Shader.PropertyToID(<span class="stringliteral">&quot;Zibra_DownscaledSmokeAndFireDepth&quot;</span>);</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno">  608</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno">  609</span> </div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno">  610</span><span class="preprocessor">#if UNITY_PIPELINE_HDRP</span></div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno">  611</span>        <span class="keyword">private</span> SmokeAndFireHDRPRenderComponent HDRPRenderer;</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno">  612</span><span class="preprocessor">#endif </span><span class="comment">// UNITY_PIPELINE_HDRP</span></div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno">  613</span> </div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno">  614</span><span class="preprocessor">#if ZIBRA_EFFECTS_DEBUG</span></div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno">  615</span>        <span class="comment">// We don&#39;t know exact number of DebugTimestampsItems returned from native plugin</span></div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno">  616</span>        <span class="comment">// because several events (like UpdateRenderParams) can be triggered many times</span></div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno">  617</span>        <span class="comment">// per frame. For our current needs 100 should be enough</span></div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno">  618</span>        [NonSerialized]</div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno">  619</span>        <span class="keyword">internal</span> SmokeAndFireBridge.DebugTimestampItem[] DebugTimestampsItems =</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno">  620</span>            <span class="keyword">new</span> SmokeAndFireBridge.DebugTimestampItem[100];</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno">  621</span>        [NonSerialized]</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno">  622</span>        <span class="keyword">internal</span> uint DebugTimestampsItemsCount = 0;</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno">  623</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno">  624</span> </div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno">  625</span><span class="preprocessor">#region NATIVE RESOURCES</span></div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno">  626</span> </div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno">  627</span>        <span class="keyword">private</span> RenderParams cameraRenderParams;</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno">  628</span>        <span class="keyword">private</span> SimulationParams simulationParams;</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno">  629</span>        <span class="keyword">private</span> IntPtr NativeManipData;</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno">  630</span>        <span class="keyword">private</span> IntPtr NativeSDFData;</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno">  631</span>        <span class="keyword">private</span> IntPtr NativeSimulationData;</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno">  632</span>        <span class="keyword">private</span> List&lt;IntPtr&gt; toFreeOnExit = <span class="keyword">new</span> List&lt;IntPtr&gt;();</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno">  633</span>        <span class="keyword">private</span> Vector2Int CurrentTextureResolution = <span class="keyword">new</span> Vector2Int(0, 0);</div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno">  634</span> </div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno">  635</span>        <span class="comment">// List of all cameras we have added a command buffer to</span></div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno">  636</span>        <span class="keyword">private</span> readonly Dictionary&lt;Camera, CommandBuffer&gt; cameraCBs = <span class="keyword">new</span> Dictionary&lt;Camera, CommandBuffer&gt;();</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno">  637</span>        <span class="keyword">internal</span> Dictionary&lt;Camera, CameraResources&gt; cameraResources = <span class="keyword">new</span> Dictionary&lt;Camera, CameraResources&gt;();</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno">  638</span>        <span class="keyword">private</span> Dictionary&lt;Camera, IntPtr&gt; camNativeParams = <span class="keyword">new</span> Dictionary&lt;Camera, IntPtr&gt;();</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno">  639</span>        <span class="keyword">private</span> Dictionary&lt;Camera, IntPtr&gt; camMeshRenderParams = <span class="keyword">new</span> Dictionary&lt;Camera, IntPtr&gt;();</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno">  640</span>        <span class="keyword">private</span> Dictionary&lt;Camera, Vector2Int&gt; camRenderResolutions = <span class="keyword">new</span> Dictionary&lt;Camera, Vector2Int&gt;();</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno">  641</span>        <span class="keyword">private</span> Dictionary&lt;Camera, Vector2Int&gt; camNativeResolutions = <span class="keyword">new</span> Dictionary&lt;Camera, Vector2Int&gt;();</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno">  642</span> </div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno">  643</span>        <span class="comment">// Each camera needs its own resources</span></div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno">  644</span>        <span class="keyword">private</span> List&lt;Camera&gt; cameras = <span class="keyword">new</span> List&lt;Camera&gt;();</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno">  645</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno">  646</span> </div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno">  647</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno">  648</span> </div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno">  649</span><span class="preprocessor">#region Solver</span></div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno">  650</span> </div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno">  651</span>        <span class="keyword">internal</span> <span class="keywordtype">bool</span> IsSimulationEnabled()</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno">  652</span>        {</div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno">  653</span>            <span class="comment">// We need at least 2 simulation frames before we can start rendering</span></div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno">  654</span>            <span class="comment">// So we need to always simulate first 2 frames</span></div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno">  655</span>            <span class="keywordflow">return</span> <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a> &amp;&amp; (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adbe358a3fdd13a7e7cea1a30b81cbe57">RunSimulation</a> || (<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ab372eb0691785420d7d9f5f9a6fad33b">SimulationInternalFrame</a> &lt;= 2));</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno">  656</span>        }</div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno">  657</span> </div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno">  658</span>        <span class="keyword">internal</span> <span class="keywordtype">bool</span> IsRenderingEnabled()</div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno">  659</span>        {</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno">  660</span>            <span class="comment">// We need at least 2 simulation frames before we can start rendering</span></div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno">  661</span>            <span class="keywordflow">return</span> <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a> &amp;&amp; <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af7aa989f02edf945bd79a0fd1feab791">RunRendering</a> &amp;&amp; (<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ab372eb0691785420d7d9f5f9a6fad33b">SimulationInternalFrame</a> &gt; 1);</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno">  662</span>        }</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno">  663</span> </div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno">  664</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> UpdateReadback()</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno">  665</span>        {</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno">  666</span>            solverCommandBuffer.Clear();</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno">  667</span> </div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno">  668</span>            <span class="comment">// This must be called at most ONCE PER FRAME</span></div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno">  669</span>            <span class="comment">// Otherwise you&#39;ll get deadlock</span></div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno">  670</span>            SmokeAndFireBridge.SubmitInstanceEvent(solverCommandBuffer, CurrentInstanceID,</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno">  671</span>                                                   SmokeAndFireBridge.EventID.UpdateReadback);</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno">  672</span> </div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno">  673</span>            Graphics.ExecuteCommandBuffer(solverCommandBuffer);</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno">  674</span> </div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno">  675</span>            UpdateManipulatorStatistics();</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno">  676</span>        }</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno">  677</span> </div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno">  678</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> UpdateSimulation()</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno">  679</span>        {</div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno">  680</span>            <span class="keywordflow">if</span> (!<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a>)</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno">  681</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno">  682</span> </div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno">  683</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#abe78de671d42526358a0d4fa561437bc">LastTimestep</a> = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a57b3ef4623ad89b62fe4f32ef9de669f">Timestep</a>;</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno">  684</span> </div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno">  685</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adbe358a3fdd13a7e7cea1a30b81cbe57">RunSimulation</a>)</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno">  686</span>                StepPhysics();</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno">  687</span> </div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno">  688</span>            Illumination();</div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno">  689</span> </div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno">  690</span><span class="preprocessor">#if UNITY_EDITOR</span></div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno">  691</span>            <a class="code hl_function" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0af557e93137dbb3358b82ad34849b49">NotifyChange</a>();</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno">  692</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno">  693</span>        }</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno">  694</span> </div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno">  695</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> UpdateInteropBuffers()</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno">  696</span>        {</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno">  697</span>            Marshal.StructureToPtr(simulationParams, NativeSimulationData, <span class="keyword">true</span>);</div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno">  698</span> </div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno">  699</span>            <span class="keywordflow">if</span> (ManipulatorManager.Elements &gt; 0)</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno">  700</span>            {</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno">  701</span>                SetInteropBuffer(NativeManipData, ManipulatorManager.ManipulatorParams);</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno">  702</span>            }</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno">  703</span> </div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno">  704</span>            <span class="keywordflow">if</span> (ManipulatorManager.SDFObjectList.Count &gt; 0)</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno">  705</span>            {</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno">  706</span>                SetInteropBuffer(NativeSDFData, ManipulatorManager.SDFObjectList);</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno">  707</span>            }</div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno">  708</span>        }</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno">  709</span> </div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno">  710</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> UpdateSolverParameters()</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno">  711</span>        {</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno">  712</span>            <span class="comment">// Update solver parameters</span></div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno">  713</span>            SmokeAndFireBridge.SubmitInstanceEvent(solverCommandBuffer, CurrentInstanceID,</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno">  714</span>                                                   SmokeAndFireBridge.EventID.UpdateSolverParameters,</div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno">  715</span>                                                   NativeSimulationData);</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno">  716</span> </div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno">  717</span>            <span class="keywordflow">if</span> (ManipulatorManager.Elements &gt; 0)</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno">  718</span>            {</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno">  719</span>                SmokeAndFireBridge.SubmitInstanceEvent(solverCommandBuffer, CurrentInstanceID,</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno">  720</span>                                                       SmokeAndFireBridge.EventID.UpdateManipulatorParameters,</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno">  721</span>                                                       NativeManipData);</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno">  722</span>            }</div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno">  723</span> </div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno">  724</span>            <span class="keywordflow">if</span> (ManipulatorManager.SDFObjectList.Count &gt; 0)</div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno">  725</span>            {</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno">  726</span>                SmokeAndFireBridge.SubmitInstanceEvent(solverCommandBuffer, CurrentInstanceID,</div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno">  727</span>                                                       SmokeAndFireBridge.EventID.UpdateSDFObjects, NativeSDFData);</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno">  728</span>            }</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno">  729</span>        }</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno">  730</span> </div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno">  731</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> StepPhysics()</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno">  732</span>        {</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno">  733</span>            solverCommandBuffer.Clear();</div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno">  734</span> </div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno">  735</span>            ForceCloseCommandEncoder(solverCommandBuffer);</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno">  736</span> </div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno">  737</span>            SetSimulationParameters();</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno">  738</span> </div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno">  739</span>            ManipulatorManager.UpdateDynamic(<span class="keyword">this</span>, <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#abe78de671d42526358a0d4fa561437bc">LastTimestep</a>);</div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno">  740</span> </div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno">  741</span>            UpdateInteropBuffers();</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno">  742</span>            UpdateSolverParameters();</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno">  743</span> </div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno">  744</span>            <span class="comment">// execute simulation</span></div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno">  745</span>            SmokeAndFireBridge.SubmitInstanceEvent(solverCommandBuffer, CurrentInstanceID,</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno">  746</span>                                                   SmokeAndFireBridge.EventID.StepPhysics);</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno">  747</span>            Graphics.ExecuteCommandBuffer(solverCommandBuffer);</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno">  748</span> </div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno">  749</span>            <span class="comment">// the actual position of the container</span></div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno">  750</span>            Vector3 prevPosition = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a60f1ebf5864cafb3a02fb0441724bb71">SimulationContainerPosition</a>;</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno">  751</span>            <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a60f1ebf5864cafb3a02fb0441724bb71">SimulationContainerPosition</a> = SmokeAndFireBridge.GetSimulationContainerPosition(CurrentInstanceID);</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno">  752</span>            isSimulationContainerPositionChanged = prevPosition != <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a60f1ebf5864cafb3a02fb0441724bb71">SimulationContainerPosition</a>;</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno">  753</span> </div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno">  754</span>            <span class="comment">// update internal time</span></div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno">  755</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a7f55e56e8e512bd64f9f5aa3ed880ccb">SimulationInternalTime</a> += <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#abe78de671d42526358a0d4fa561437bc">LastTimestep</a>;</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno">  756</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ab372eb0691785420d7d9f5f9a6fad33b">SimulationInternalFrame</a>++;</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno">  757</span>        }</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno">  758</span> </div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno">  759</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> UpdateManipulatorStatistics()</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno">  760</span>        {</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno">  762</span>            <span class="keywordflow">if</span> (ManipulatorManager.Elements &gt; 0)</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno">  763</span>            {</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno">  764</span>                UInt32 size = (UInt32)ManipulatorManager.Elements * STATISTICS_PER_MANIPULATOR;</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno">  765</span>                IntPtr readbackData =</div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno">  766</span>                    SmokeAndFireBridge.ZibraSmokeAndFire_GPUReadbackGetData(CurrentInstanceID, size * <span class="keyword">sizeof</span>(Int32));</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno">  767</span>                <span class="keywordflow">if</span> (readbackData != IntPtr.Zero)</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno">  768</span>                {</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno">  769</span>                    Int32[] Stats = <span class="keyword">new</span> Int32[size];</div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno">  770</span>                    Marshal.Copy(readbackData, Stats, 0, (Int32)size);</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno">  771</span>                    ManipulatorManager.UpdateStatistics(Stats, Manipulators, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>);</div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno">  772</span>                }</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno">  773</span>            }</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno">  774</span>        }</div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno">  775</span> </div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno">  776</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> SetSimulationParameters()</div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno">  777</span>        {</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno">  778</span>            simulationParams.GridSize = <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>;</div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno">  779</span>            simulationParams.NodeCount = NumNodes;</div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno">  780</span> </div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno">  781</span>            simulationParams.ContainerScale = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>;</div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno">  782</span>            simulationParams.MinimumVelocity = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a987baafffb0159de6d47ef7ff1e1041e">MinimumVelocity</a>;</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno">  783</span> </div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno">  784</span>            simulationParams.ContainerPos = transform.position;</div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno">  785</span>            simulationParams.MaximumVelocity = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a20c587a478cfacd0c8ddf21730659308">MaximumVelocity</a>;</div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno">  786</span> </div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno">  787</span>            simulationParams.TimeStep = <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#abe78de671d42526358a0d4fa561437bc">LastTimestep</a>;</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno">  788</span>            simulationParams.SimulationTime = <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a7f55e56e8e512bd64f9f5aa3ed880ccb">SimulationInternalTime</a>;</div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno">  789</span>            simulationParams.SimulationFrame = <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ab372eb0691785420d7d9f5f9a6fad33b">SimulationInternalFrame</a>;</div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno">  790</span>            simulationParams.Sharpen = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a28afaad3316fa76faed5e38e5a5e2a87">Sharpen</a>;</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno">  791</span>            simulationParams.SharpenThreshold = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a458fbc89ca211a413c0a20e445c1310e">SharpenThreshold</a>;</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno">  792</span> </div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno">  793</span>            simulationParams.JacobiIterations = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a60333e5c1045b9f84dbb1d157394a690">PressureSolveIterations</a>;</div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno">  794</span>            simulationParams.ColorDecay = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a33457d6a2e6224e33862265cae43d7e8">ColorDecay</a>;</div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno">  795</span>            simulationParams.VelocityDecay = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a001716b948208be6c6cd1e871c7cc1fa">VelocityDecay</a>;</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno">  796</span>            simulationParams.PressureReuse = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a417910ac454e34da772e1cb914446f98">PressureReuse</a>;</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno">  797</span>            simulationParams.PressureReuseClamp = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.PressureReuseClamp;</div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno">  798</span>            simulationParams.PressureProjection = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#ac85398ce191195d8b67fb57859116477">PressureProjection</a>;</div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno">  799</span>            simulationParams.PressureClamp = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.PressureClamp;</div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno">  800</span> </div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno">  801</span>            simulationParams.Gravity = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#ad3a855025d212c719d292cb6ce16bafc">Gravity</a>;</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno">  802</span>            simulationParams.SmokeBuoyancy = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#aaeb873fa44fbecff2ebeb95b0871e415">SmokeBuoyancy</a>;</div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno">  803</span> </div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno">  804</span>            simulationParams.LOD0Iterations = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.LOD0Iterations;</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno">  805</span>            simulationParams.LOD1Iterations = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.LOD1Iterations;</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno">  806</span>            simulationParams.LOD2Iterations = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.LOD2Iterations;</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno">  807</span>            simulationParams.PreIterations = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.PreIterations;</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno">  808</span> </div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno">  809</span>            simulationParams.MainOverrelax = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.MainOverrelax;</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno">  810</span>            simulationParams.EdgeOverrelax = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.EdgeOverrelax;</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno">  811</span>            simulationParams.VolumeEdgeFadeoff = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a740efc881a3c56258b2b170d4f2553e0">VolumeEdgeFadeoff</a>;</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno">  812</span>            simulationParams.SimulationIterations = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af20b00f33a5e5c39d46a5c26fd4c92f9">SimulationIterations</a>;</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno">  813</span> </div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno">  814</span>            simulationParams.SimulationMode = (int)<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6d4293288031a149d20f7884389e1505">ActiveSimulationMode</a>;</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno">  815</span>            simulationParams.FixVolumeWorldPosition = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af1d6faf266c7e9c47ff8d56c50994d7e">FixVolumeWorldPosition</a> ? 1 : 0;</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno">  816</span> </div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno">  817</span>            simulationParams.FuelDensity = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a14e138c314413407cff5c51c3014b14a">FuelDensity</a>;</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno">  818</span>            simulationParams.SmokeDensity = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a314f489e56fc4099b92ba4ced2e23b93">SmokeDensity</a>;</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno">  819</span>            simulationParams.TemperatureDensityDependence = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a96cc752b1e70b97f1aee6d5e8b39e238">TemperatureDensityDependence</a>;</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno">  820</span>            simulationParams.FireBrightness =</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno">  821</span>                materialParameters.FireBrightness + <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a3cd78cd2f366cb4b12414af882fe6aa0">BlackBodyBrightness</a>;</div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno">  822</span> </div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno">  823</span>            simulationParams.TempThreshold = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#ac6da9dedc2700689e9b7888cc5fcf9f8">TempThreshold</a>;</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno">  824</span>            simulationParams.HeatEmission = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#ae740da185f94dd69f31bfcc5a28da7f8">HeatEmission</a>;</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno">  825</span>            simulationParams.ReactionSpeed = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a352824b3cf246e3b5e6d132d4626ecf7">ReactionSpeed</a>;</div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno">  826</span>            simulationParams.HeatBuoyancy = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a59b4e65d490a0e891dd38312e718ddf1">HeatBuoyancy</a>;</div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno">  827</span> </div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno">  828</span>            simulationParams.MaxEffectParticleCount = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a646450d6b4d0d5944bc1a5f7eb25eea6">MaxEffectParticles</a>;</div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno">  829</span>            simulationParams.ParticleLifetime = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#ac562f67b17dab19fb68b5b78d11a1232">ParticleLifetime</a>;</div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno">  830</span> </div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno">  831</span>            simulationParams.GridSizeLOD = GridSizeLOD;</div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno">  832</span>            simulationParams.GridDownscale = GridDownscale;</div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno">  833</span>        }</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno">  834</span> </div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno">  835</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> RefreshEmitterColorsTexture()</div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno">  836</span>        {</div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno">  837</span>            var emitters = Manipulators.FindAll(manip =&gt; manip is <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter.html">ZibraParticleEmitter</a>);</div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno">  838</span> </div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno">  839</span>            var textureFormat = GraphicsFormat.R8G8B8A8_UNorm;</div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno">  840</span>            var textureFlags = TextureCreationFlags.None;</div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno">  841</span> </div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno">  842</span>            emitters.Sort(<span class="keyword">new</span> <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator_compare.html">ManipulatorCompare</a>());</div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno">  843</span>            <span class="keywordflow">if</span> (EmittersColorsTexture == <span class="keyword">null</span> &amp;&amp; emitters.Count == 0)</div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno">  844</span>            {</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno">  845</span>                EmittersColorsTexture = <span class="keyword">new</span> Texture2D(1, 1, textureFormat, textureFlags);</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno">  846</span>                EmittersColorsStagingTexture = <span class="keyword">new</span> Texture2D(1, 1, textureFormat, textureFlags);</div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno">  847</span>            }</div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno">  848</span>            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (EmittersColorsTexture == <span class="keyword">null</span> || emitters.Count != EmittersColorsTexture.height)</div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno">  849</span>            {</div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno">  850</span>                EmittersColorsTexture = <span class="keyword">new</span> Texture2D(EMITTER_GRADIENT_TEX_WIDTH, Mathf.Max(emitters.Count, 1),</div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno">  851</span>                                                      textureFormat, textureFlags);</div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno">  852</span>                EmittersColorsStagingTexture = <span class="keyword">new</span> Texture2D(EMITTER_GRADIENT_TEX_WIDTH, Mathf.Max(emitters.Count, 1),</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno">  853</span>                                                      textureFormat, textureFlags);</div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno">  854</span>            }</div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno">  855</span> </div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno">  856</span>            <span class="keywordflow">if</span> (EmittersSpriteTexture == <span class="keyword">null</span>)</div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno">  857</span>            {</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno">  858</span>                <span class="keywordtype">int</span>[] dimensions = <span class="keyword">new</span> <span class="keywordtype">int</span>[] { 1, 1, Mathf.Max(1, emitters.Count) };</div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno">  859</span>                <span class="keywordflow">if</span> (emitters.Find(emitter =&gt; (emitter as <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter.html">ZibraParticleEmitter</a>).RenderMode ==</div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno">  860</span>                                             <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter.html">ZibraParticleEmitter</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter.html#a87cafe63badc45546f2eb940f2a94d70">RenderingMode</a>.Sprite))</div>
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno">  861</span>                {</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno">  862</span>                    dimensions[0] = dimensions[1] = EMITTER_SPRITE_TEX_SIZE;</div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno">  863</span>                }</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno">  864</span>                EmittersSpriteTexture =</div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno">  865</span>                    <span class="keyword">new</span> Texture3D(dimensions[0], dimensions[1], dimensions[2], textureFormat, textureFlags);</div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno">  866</span>            }</div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno">  867</span> </div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno">  868</span>            <span class="keywordtype">float</span> inv = 1f / (EMITTER_GRADIENT_TEX_WIDTH - 1);</div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno">  869</span>            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> y = 0; y &lt; emitters.Count; y++)</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno">  870</span>            {</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno">  871</span>                var curEmitter = emitters[y] as <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter.html">ZibraParticleEmitter</a>;</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno">  872</span>                <span class="keywordflow">for</span> (<span class="keywordtype">int</span> x = 0; x &lt; EMITTER_GRADIENT_TEX_WIDTH; x++)</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno">  873</span>                {</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno">  874</span>                    var t = x * inv;</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno">  875</span>                    Color col = curEmitter.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter.html#aeab2fc481d3d6116dd723c79bd70d25d">ParticleColor</a>.Evaluate(t);</div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno">  876</span>                    col.a = curEmitter.SizeCurve.Evaluate(t) * EMITTER_PARTICLE_SIZE_SCALE;</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno">  877</span>                    <span class="comment">// Can&#39;t do SetPixel/Apply on texture passed to native plugin</span></div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno">  878</span>                    <span class="comment">// That will invalidate texture on Metal and crash!</span></div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno">  879</span>                    EmittersColorsStagingTexture.SetPixel(x, y, col);</div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno">  880</span>                }</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno">  881</span> </div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno">  882</span>                <span class="keywordflow">if</span> (curEmitter.RenderMode == <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter.html">ZibraParticleEmitter</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter.html#a87cafe63badc45546f2eb940f2a94d70">RenderingMode</a>.Sprite)</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno">  883</span>                {</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno">  884</span>                    RenderTexture rt =</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno">  885</span>                        <span class="keyword">new</span> RenderTexture(EMITTER_SPRITE_TEX_SIZE, EMITTER_SPRITE_TEX_SIZE, 0, textureFormat);</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno">  886</span>                    Graphics.Blit(curEmitter.ParticleSprite, rt);</div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno">  887</span>                    <span class="keywordtype">int</span> slice = y;</div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno">  888</span>                    Graphics.CopyTexture(rt, 0, EmittersSpriteTexture, slice);</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno">  889</span>                }</div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno">  890</span>            }</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno">  891</span>            EmittersColorsStagingTexture.Apply();</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno">  892</span>            Graphics.CopyTexture(EmittersColorsStagingTexture, EmittersColorsTexture);</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno">  893</span>        }</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno">  894</span> </div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno">  895</span><span class="preprocessor">#if ZIBRA_EFFECTS_DEBUG</span></div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno">  896</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> UpdateDebugTimestamps()</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno">  897</span>        {</div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno">  898</span>            <span class="keywordflow">if</span> (!IsSimulationEnabled())</div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno">  899</span>            {</div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno">  900</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno">  901</span>            }</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno">  902</span>            DebugTimestampsItemsCount =</div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno">  903</span>                SmokeAndFireBridge.ZibraSmokeAndFire_GetDebugTimestamps(CurrentInstanceID, DebugTimestampsItems);</div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno">  904</span>        }</div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno">  905</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno">  906</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno">  907</span> </div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno">  908</span><span class="preprocessor">#region Render functions</span></div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno">  909</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> InitializeNativeCameraParams(Camera cam)</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno">  910</span>        {</div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno">  911</span>            <span class="keywordflow">if</span> (!camNativeParams.ContainsKey(cam))</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno">  912</span>            {</div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno">  913</span>                <span class="comment">// allocate memory for camera parameters</span></div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno">  914</span>                camNativeParams[cam] = Marshal.AllocHGlobal(Marshal.SizeOf(cameraRenderParams));</div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno">  915</span>            }</div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno">  916</span>        }</div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno">  917</span> </div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno">  918</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> SetMaterialParams(Material material)</div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno">  919</span>        {</div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno">  920</span>            material.SetFloat(<span class="stringliteral">&quot;SmokeDensity&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a314f489e56fc4099b92ba4ced2e23b93">SmokeDensity</a>);</div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno">  921</span>            material.SetFloat(<span class="stringliteral">&quot;FuelDensity&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a14e138c314413407cff5c51c3014b14a">FuelDensity</a>);</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno">  922</span> </div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno">  923</span>            material.SetVector(<span class="stringliteral">&quot;ShadowColor&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a2cff1b1346b0392dc707f0065b823349">ShadowAbsorptionColor</a>);</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno">  924</span>            material.SetVector(<span class="stringliteral">&quot;AbsorptionColor&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a2b103e8d00331822b55bc41a410d72ce">AbsorptionColor</a>);</div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno">  925</span>            material.SetVector(<span class="stringliteral">&quot;ScatteringColor&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a963de9a74a3301001bd3e2eb77294001">ScatteringColor</a>);</div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno">  926</span>            material.SetFloat(<span class="stringliteral">&quot;ScatteringAttenuation&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a6009866bc671eeea31109f2c54382dd2">ScatteringAttenuation</a>);</div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno">  927</span>            material.SetFloat(<span class="stringliteral">&quot;ScatteringContribution&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a6e51f3b002b227dc187dcd475848d6ae">ScatteringContribution</a>);</div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno">  928</span>            material.SetFloat(<span class="stringliteral">&quot;FakeShadows&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a44c852b3e6ec03028f6ab922db39bc70">ObjectShadowIntensity</a>);</div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno">  929</span>            material.SetFloat(<span class="stringliteral">&quot;ShadowDistanceDecay&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a2b4b6068fc3333ddbb02ac27514e3416">ShadowDistanceDecay</a>);</div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno">  930</span>            material.SetFloat(<span class="stringliteral">&quot;ShadowIntensity&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a7945a66501e6d3f4ad6b5d2315e0f7f3">ShadowIntensity</a>);</div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno">  931</span>            material.SetFloat(<span class="stringliteral">&quot;StepSize&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a13aa33b610255ffda5c757852b396d38">RayMarchingStepSize</a>);</div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno">  932</span> </div>
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno">  933</span>            material.SetInt(<span class="stringliteral">&quot;PrimaryShadows&quot;</span>, (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a6289454206261f6c9375f76d7c4238c5">ObjectPrimaryShadows</a> &amp;&amp; <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a513906c0545ef4c34563175adb79277f">MainLight</a>.enabled) ? 1 : 0);</div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno">  934</span>            material.SetInt(<span class="stringliteral">&quot;IlluminationShadows&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a349c1172d9ccb57a1c380e71e5deaca9">ObjectIlluminationShadows</a> ? 1 : 0);</div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno">  935</span> </div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno">  936</span>            material.SetVector(<span class="stringliteral">&quot;ContainerScale&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>);</div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno">  937</span>            material.SetVector(<span class="stringliteral">&quot;ContainerPosition&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a60f1ebf5864cafb3a02fb0441724bb71">SimulationContainerPosition</a>);</div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno">  938</span>            material.SetVector(<span class="stringliteral">&quot;GridSize&quot;</span>, (Vector3)<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>);</div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno">  939</span> </div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno">  940</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a513906c0545ef4c34563175adb79277f">MainLight</a> == <span class="keyword">null</span>)</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno">  941</span>            {</div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno">  942</span>                Debug.LogError(<span class="stringliteral">&quot;No main light source set in the Zibra Flames instance.&quot;</span>);</div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno">  943</span>            }</div>
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno">  944</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno">  945</span>            {</div>
<div class="line"><a id="l00946" name="l00946"></a><span class="lineno">  946</span>                material.SetVector(<span class="stringliteral">&quot;LightColor&quot;</span>, GetLightColor(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a513906c0545ef4c34563175adb79277f">MainLight</a>));</div>
<div class="line"><a id="l00947" name="l00947"></a><span class="lineno">  947</span>                material.SetVector(<span class="stringliteral">&quot;LightDirWorld&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a513906c0545ef4c34563175adb79277f">MainLight</a>.transform.rotation * <span class="keyword">new</span> Vector3(0, 0, -1));</div>
<div class="line"><a id="l00948" name="l00948"></a><span class="lineno">  948</span>            }</div>
<div class="line"><a id="l00949" name="l00949"></a><span class="lineno">  949</span> </div>
<div class="line"><a id="l00950" name="l00950"></a><span class="lineno">  950</span>            material.SetTexture(<span class="stringliteral">&quot;BlueNoise&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.BlueNoise);</div>
<div class="line"><a id="l00951" name="l00951"></a><span class="lineno">  951</span>            material.SetTexture(<span class="stringliteral">&quot;Color&quot;</span>, RenderColor);</div>
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno">  952</span>            material.SetTexture(<span class="stringliteral">&quot;Illumination&quot;</span>, RenderIllumination);</div>
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno">  953</span>            material.SetTexture(<span class="stringliteral">&quot;Density&quot;</span>, RenderDensity);</div>
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno">  954</span>            material.SetInt(<span class="stringliteral">&quot;DensityDownscale&quot;</span>, 1);</div>
<div class="line"><a id="l00955" name="l00955"></a><span class="lineno">  955</span> </div>
<div class="line"><a id="l00956" name="l00956"></a><span class="lineno">  956</span>            material.SetTexture(<span class="stringliteral">&quot;Shadowmap&quot;</span>, Shadowmap);</div>
<div class="line"><a id="l00957" name="l00957"></a><span class="lineno">  957</span>            material.SetTexture(<span class="stringliteral">&quot;Lightmap&quot;</span>, Lightmap);</div>
<div class="line"><a id="l00958" name="l00958"></a><span class="lineno">  958</span> </div>
<div class="line"><a id="l00959" name="l00959"></a><span class="lineno">  959</span>            <span class="keywordtype">int</span> mainLightMode = MainLight.enabled ? 1 : 0;</div>
<div class="line"><a id="l00960" name="l00960"></a><span class="lineno">  960</span>            Vector4[] lightColors = <span class="keyword">new</span> Vector4[MAX_LIGHT_COUNT];</div>
<div class="line"><a id="l00961" name="l00961"></a><span class="lineno">  961</span>            Vector4[] lightPositions = <span class="keyword">new</span> Vector4[MAX_LIGHT_COUNT];</div>
<div class="line"><a id="l00962" name="l00962"></a><span class="lineno">  962</span>            <span class="keywordtype">int</span> lightCount = GetLights(ref lightColors, ref lightPositions);</div>
<div class="line"><a id="l00963" name="l00963"></a><span class="lineno">  963</span> </div>
<div class="line"><a id="l00964" name="l00964"></a><span class="lineno">  964</span>            material.SetVectorArray(<span class="stringliteral">&quot;LightColorArray&quot;</span>, lightColors);</div>
<div class="line"><a id="l00965" name="l00965"></a><span class="lineno">  965</span>            material.SetVectorArray(<span class="stringliteral">&quot;LightPositionArray&quot;</span>, lightPositions);</div>
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno">  966</span>            material.SetInt(<span class="stringliteral">&quot;LightCount&quot;</span>, lightCount);</div>
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno">  967</span>            material.SetInt(<span class="stringliteral">&quot;MainLightMode&quot;</span>, mainLightMode);</div>
<div class="line"><a id="l00968" name="l00968"></a><span class="lineno">  968</span> </div>
<div class="line"><a id="l00969" name="l00969"></a><span class="lineno">  969</span><span class="preprocessor">#if UNITY_PIPELINE_HDRP</span></div>
<div class="line"><a id="l00970" name="l00970"></a><span class="lineno">  970</span>            material.EnableKeyword(<span class="stringliteral">&quot;HDRP&quot;</span>);</div>
<div class="line"><a id="l00971" name="l00971"></a><span class="lineno">  971</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00972" name="l00972"></a><span class="lineno">  972</span>            material.DisableKeyword(<span class="stringliteral">&quot;HDRP&quot;</span>);</div>
<div class="line"><a id="l00973" name="l00973"></a><span class="lineno">  973</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00974" name="l00974"></a><span class="lineno">  974</span>        }</div>
<div class="line"><a id="l00975" name="l00975"></a><span class="lineno">  975</span> </div>
<div class="line"><a id="l00976" name="l00976"></a><span class="lineno">  976</span>        <span class="keyword">private</span> <span class="keywordtype">bool</span> SetMaterialParams(Camera cam)</div>
<div class="line"><a id="l00977" name="l00977"></a><span class="lineno">  977</span>        {</div>
<div class="line"><a id="l00978" name="l00978"></a><span class="lineno">  978</span>            <span class="keywordtype">bool</span> isDirty = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00979" name="l00979"></a><span class="lineno">  979</span> </div>
<div class="line"><a id="l00980" name="l00980"></a><span class="lineno">  980</span>            CameraResources camRes = cameraResources[cam];</div>
<div class="line"><a id="l00981" name="l00981"></a><span class="lineno">  981</span> </div>
<div class="line"><a id="l00982" name="l00982"></a><span class="lineno">  982</span>            Material usedUpscaleMaterial = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">EnableDownscale</a> ? materialParameters.UpscaleMaterial : <span class="keyword">null</span>;</div>
<div class="line"><a id="l00983" name="l00983"></a><span class="lineno">  983</span> </div>
<div class="line"><a id="l00984" name="l00984"></a><span class="lineno">  984</span>            isDirty = camRes.upscaleMaterial.SetMaterial(usedUpscaleMaterial) || isDirty;</div>
<div class="line"><a id="l00985" name="l00985"></a><span class="lineno">  985</span> </div>
<div class="line"><a id="l00986" name="l00986"></a><span class="lineno">  986</span>            Material CurrentSharedMaterial = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a92d7008fb6b55166239d6a7ca44284b1">SmokeMaterial</a>;</div>
<div class="line"><a id="l00987" name="l00987"></a><span class="lineno">  987</span> </div>
<div class="line"><a id="l00988" name="l00988"></a><span class="lineno">  988</span>            isDirty = camRes.smokeAndFireMaterial.SetMaterial(CurrentSharedMaterial) || isDirty;</div>
<div class="line"><a id="l00989" name="l00989"></a><span class="lineno">  989</span> </div>
<div class="line"><a id="l00990" name="l00990"></a><span class="lineno">  990</span>            Material CurrentMaterial = camRes.smokeAndFireMaterial.currentMaterial;</div>
<div class="line"><a id="l00991" name="l00991"></a><span class="lineno">  991</span> </div>
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno">  992</span>            SetMaterialParams(CurrentMaterial);</div>
<div class="line"><a id="l00993" name="l00993"></a><span class="lineno">  993</span> </div>
<div class="line"><a id="l00994" name="l00994"></a><span class="lineno">  994</span>            Material CurretShadowProjectionMaterial = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#ad8b5e46d40fa01f89330676850b1b2d7">ShadowProjectionMaterial</a>;</div>
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno">  995</span> </div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno">  996</span>            isDirty = camRes.smokeShadowProjectionMaterial.SetMaterial(CurretShadowProjectionMaterial) || isDirty;</div>
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno">  997</span> </div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno">  998</span>            Material CurrentShadowProjectionMaterial = camRes.smokeShadowProjectionMaterial.currentMaterial;</div>
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno">  999</span> </div>
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span>            SetMaterialParams(CurrentShadowProjectionMaterial);</div>
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> </div>
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#ac96c21d74cb6f79d01f0043849565162">ShadowProjectionQualityLevel</a> ==</div>
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span>                <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html">ZibraSmokeAndFireMaterialParameters</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a1622a3d38fc3efc3408bdf24cbf3f57a">ShadowProjectionQuality</a>.Tricubic)</div>
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span>            {</div>
<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span>                CurrentShadowProjectionMaterial.EnableKeyword(<span class="stringliteral">&quot;TRICUBIC&quot;</span>);</div>
<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span>            }</div>
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span>            {</div>
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span>                CurrentShadowProjectionMaterial.DisableKeyword(<span class="stringliteral">&quot;TRICUBIC&quot;</span>);</div>
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span>            }</div>
<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span> </div>
<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span><span class="preprocessor">#if UNITY_IOS &amp;&amp; !UNITY_EDITOR</span></div>
<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span>            <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">EnableDownscale</a>)</div>
<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span>            {</div>
<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span>                CurrentMaterial.EnableKeyword(<span class="stringliteral">&quot;FLIP_NATIVE_TEXTURES&quot;</span>);</div>
<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span>            }</div>
<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span>            {</div>
<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span>                CurrentMaterial.DisableKeyword(<span class="stringliteral">&quot;FLIP_NATIVE_TEXTURES&quot;</span>);</div>
<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span>            }</div>
<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span>            CurrentShadowProjectionMaterial.EnableKeyword(<span class="stringliteral">&quot;FLIP_NATIVE_TEXTURES&quot;</span>);</div>
<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span><span class="preprocessor">#if UNITY_ANDROID &amp;&amp; !UNITY_EDITOR</span></div>
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span>            <span class="keywordflow">if</span> (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Vulkan)</div>
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span>            {</div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span>                <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">EnableDownscale</a>)</div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span>                {</div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span>                    CurrentMaterial.EnableKeyword(<span class="stringliteral">&quot;FLIP_NATIVE_TEXTURES&quot;</span>);</div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span>                }</div>
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span>                <span class="keywordflow">else</span></div>
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span>                {</div>
<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span>                    CurrentMaterial.DisableKeyword(<span class="stringliteral">&quot;FLIP_NATIVE_TEXTURES&quot;</span>);</div>
<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span>                }</div>
<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span>                CurrentShadowProjectionMaterial.EnableKeyword(<span class="stringliteral">&quot;FLIP_NATIVE_TEXTURES&quot;</span>);</div>
<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span>            }</div>
<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> </div>
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span>            <span class="keywordflow">return</span> isDirty;</div>
<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span>        }</div>
<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> </div>
<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span>        <span class="keyword">internal</span> Vector2Int ApplyDownscaleFactor(Vector2Int val)</div>
<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span>        {</div>
<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"> 1043</span>            <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">EnableDownscale</a>)</div>
<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span>                <span class="keywordflow">return</span> val;</div>
<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span>            <span class="keywordflow">return</span> <span class="keyword">new</span> Vector2Int((<span class="keywordtype">int</span>)(val.x * <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6183f87b169d9690a53e7312507c2a42">DownscaleFactor</a>), (<span class="keywordtype">int</span>)(val.y * <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6183f87b169d9690a53e7312507c2a42">DownscaleFactor</a>));</div>
<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span>        }</div>
<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span> </div>
<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span>        <span class="keyword">private</span> Vector2Int ApplyRenderPipelineRenderScale(Vector2Int val, <span class="keywordtype">float</span> renderPipelineRenderScale)</div>
<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span>        {</div>
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span>            <span class="keywordflow">return</span> <span class="keyword">new</span> Vector2Int((<span class="keywordtype">int</span>)(val.x * renderPipelineRenderScale), (<span class="keywordtype">int</span>)(val.y * renderPipelineRenderScale));</div>
<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span>        }</div>
<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span> </div>
<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span>        <span class="keyword">private</span> RenderTexture CreateTexture(RenderTexture texture, Vector2Int resolution, <span class="keywordtype">bool</span> applyDownscaleFactor,</div>
<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span>                                            FilterMode filterMode, <span class="keywordtype">int</span> depth, RenderTextureFormat format,</div>
<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span>                                            <span class="keywordtype">bool</span> enableRandomWrite, ref <span class="keywordtype">bool</span> hasBeenUpdated)</div>
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span>        {</div>
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span>            <span class="keywordflow">if</span> (texture == <span class="keyword">null</span> || texture.width != resolution.x || texture.height != resolution.y ||</div>
<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span>                forceTextureUpdate)</div>
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span>            {</div>
<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span>                ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(texture);</div>
<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> </div>
<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span>                var newTexture = <span class="keyword">new</span> RenderTexture(resolution.x, resolution.y, depth, format);</div>
<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span>                newTexture.enableRandomWrite = enableRandomWrite;</div>
<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span>                newTexture.filterMode = filterMode;</div>
<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span>                newTexture.Create();</div>
<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span>                hasBeenUpdated = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span>                <span class="keywordflow">return</span> newTexture;</div>
<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span>            }</div>
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span> </div>
<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span>            <span class="keywordflow">return</span> texture;</div>
<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span>        }</div>
<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span> </div>
<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> UpdateCameraResolution(Camera cam, <span class="keywordtype">float</span> renderPipelineRenderScale)</div>
<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"> 1074</span>        {</div>
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span>            Vector2Int cameraResolution = <span class="keyword">new</span> Vector2Int(cam.pixelWidth, cam.pixelHeight);</div>
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span>            cameraResolution = ApplyRenderPipelineRenderScale(cameraResolution, renderPipelineRenderScale);</div>
<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span>            camNativeResolutions[cam] = cameraResolution;</div>
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span>            Vector2Int cameraResolutionDownscaled = ApplyDownscaleFactor(cameraResolution);</div>
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span>            camRenderResolutions[cam] = cameraResolutionDownscaled;</div>
<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span>        }</div>
<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> </div>
<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span>        <span class="keyword">internal</span> <span class="keywordtype">void</span> RenderSmokeAndFireMain(CommandBuffer cmdBuffer, Camera cam, Rect? viewport = <span class="keyword">null</span>)</div>
<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span>        {</div>
<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span>            RenderSmokeAndFire(cmdBuffer, cam, viewport);</div>
<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span>        }</div>
<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> </div>
<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span>        <span class="keyword">internal</span> <span class="keywordtype">void</span> UpscaleSmokeAndFireDirect(CommandBuffer cmdBuffer, Camera cam,</div>
<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span>                                                RenderTargetIdentifier? sourceColorTexture = <span class="keyword">null</span>,</div>
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span>                                                RenderTargetIdentifier? sourceDepthTexture = <span class="keyword">null</span>,</div>
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span>                                                Rect? viewport = <span class="keyword">null</span>)</div>
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span>        {</div>
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span>            Material CurrentUpscaleMaterial = cameraResources[cam].upscaleMaterial.currentMaterial;</div>
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span>            Vector2Int cameraNativeResolution = camNativeResolutions[cam];</div>
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span> </div>
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span>            cmdBuffer.SetViewport(<span class="keyword">new</span> Rect(0, 0, cameraNativeResolution.x, cameraNativeResolution.y));</div>
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span>            <span class="keywordflow">if</span> (sourceColorTexture == <span class="keyword">null</span>)</div>
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span>            {</div>
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span>                cmdBuffer.SetGlobalTexture(<span class="stringliteral">&quot;RenderedVolume&quot;</span>, UpscaleColor);</div>
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span>            }</div>
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span>            {</div>
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span>                cmdBuffer.SetGlobalTexture(<span class="stringliteral">&quot;RenderedVolume&quot;</span>, sourceColorTexture.Value);</div>
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span>            }</div>
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> </div>
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span>            cmdBuffer.DrawProcedural(transform.localToWorldMatrix, CurrentUpscaleMaterial, 0, MeshTopology.Triangles,</div>
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span>                                     6);</div>
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span>        }</div>
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> </div>
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> UpdateCamera(Camera cam)</div>
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span>        {</div>
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span>            Vector2Int resolution = camRenderResolutions[cam];</div>
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span> </div>
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span>            Material CurrentMaterial = cameraResources[cam].smokeAndFireMaterial.currentMaterial;</div>
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span>            Material CurrentUpscaleMaterial = cameraResources[cam].upscaleMaterial.currentMaterial;</div>
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span>            Material CurrentShadowProjectionMaterial =</div>
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span>                cameraResources[cam].smokeShadowProjectionMaterial.currentMaterial;</div>
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> </div>
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span>            Matrix4x4 Projection = GL.GetGPUProjectionMatrix(cam.projectionMatrix, <span class="keyword">true</span>);</div>
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span>            Matrix4x4 ProjectionInverse = Projection.inverse;</div>
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span>            Matrix4x4 View = cam.worldToCameraMatrix;</div>
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span>            Matrix4x4 ViewProjection = Projection * View;</div>
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span>            Matrix4x4 ViewProjectionInverse = ViewProjection.inverse;</div>
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> </div>
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span>            cameraRenderParams.View = cam.worldToCameraMatrix;</div>
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span>            cameraRenderParams.Projection = Projection;</div>
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span>            cameraRenderParams.ProjectionInverse = ProjectionInverse;</div>
<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span>            cameraRenderParams.ViewProjection = ViewProjection;</div>
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span>            cameraRenderParams.ViewProjectionInverse = ViewProjectionInverse;</div>
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span>            cameraRenderParams.WorldSpaceCameraPos = cam.transform.position;</div>
<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span>            cameraRenderParams.CameraResolution = <span class="keyword">new</span> Vector2(resolution.x, resolution.y);</div>
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span>            cameraRenderParams.CameraDownscaleFactor = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">EnableDownscale</a> ? <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6183f87b169d9690a53e7312507c2a42">DownscaleFactor</a> : 1f;</div>
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span>            { <span class="comment">// Same as Unity&#39;s built-in _ZBufferParams</span></div>
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span>                <span class="keywordtype">float</span> y = cam.farClipPlane / cam.nearClipPlane;</div>
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span>                <span class="keywordtype">float</span> x = 1 - y;</div>
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span>                cameraRenderParams.ZBufferParams = <span class="keyword">new</span> Vector4(x, y, x / cam.farClipPlane, y / cam.farClipPlane);</div>
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span>            }</div>
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span>            cameraRenderParams.CameraID = cameras.IndexOf(cam);</div>
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> </div>
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span>            CurrentMaterial.SetVector(<span class="stringliteral">&quot;Resolution&quot;</span>, cameraRenderParams.CameraResolution);</div>
<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span>            CurrentMaterial.SetMatrix(<span class="stringliteral">&quot;ViewProjectionInverse&quot;</span>, cameraRenderParams.ViewProjectionInverse);</div>
<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"> 1141</span>            CurrentMaterial.SetFloat(<span class="stringliteral">&quot;DownscaleFactor&quot;</span>, cameraRenderParams.CameraDownscaleFactor);</div>
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span> </div>
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span>            <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute.SetVector(<span class="stringliteral">&quot;OriginalCameraResolution&quot;</span>, <span class="keyword">new</span> Vector2(cam.pixelWidth, cam.pixelHeight));</div>
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span>            CurrentShadowProjectionMaterial.SetMatrix(<span class="stringliteral">&quot;ViewProjectionInverse&quot;</span>,</div>
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span>                                                      cameraRenderParams.ViewProjectionInverse);</div>
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> </div>
<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span>            <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute.SetVector(<span class="stringliteral">&quot;Resolution&quot;</span>, cameraRenderParams.CameraResolution);</div>
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span>            <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute.SetMatrix(<span class="stringliteral">&quot;ViewProjectionInverse&quot;</span>, cameraRenderParams.ViewProjectionInverse);</div>
<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span> </div>
<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span>            <span class="comment">// update the data at the pointer</span></div>
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span>            Marshal.StructureToPtr(cameraRenderParams, camNativeParams[cam], <span class="keyword">true</span>);</div>
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> </div>
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span>            Vector2 textureScale = <span class="keyword">new</span> Vector2(resolution.x, resolution.y) / GetRequiredTextureResolution();</div>
<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span> </div>
<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span>            CurrentMaterial.SetVector(<span class="stringliteral">&quot;TextureScale&quot;</span>, textureScale);</div>
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span> </div>
<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">EnableDownscale</a>)</div>
<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span>            {</div>
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span>                CurrentUpscaleMaterial.SetVector(<span class="stringliteral">&quot;TextureScale&quot;</span>, textureScale);</div>
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span>            }</div>
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span>        }</div>
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> </div>
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> DisableForCamera(Camera cam)</div>
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span>        {</div>
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span>            cam.RemoveCommandBuffer(ActiveInjectionPoint, cameraCBs[cam]);</div>
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span>            cameraCBs[cam].Dispose();</div>
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span>            cameraCBs.Remove(cam);</div>
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span>        }</div>
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> </div>
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span><span class="preprocessor">#region Render</span></div>
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> UpdateNativeRenderParams(CommandBuffer cmdBuffer, Camera cam)</div>
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span>        {</div>
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span>            SmokeAndFireBridge.SubmitInstanceEvent(</div>
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span>                cmdBuffer, CurrentInstanceID, SmokeAndFireBridge.EventID.SetRenderParameters, camNativeParams[cam]);</div>
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span>        }</div>
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span> </div>
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span>        <span class="keyword">internal</span> <span class="keywordtype">void</span> RenderCallBack(Camera cam, <span class="keywordtype">float</span> renderPipelineRenderScale = 1.0f)</div>
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span>        {</div>
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span>            <span class="keywordflow">if</span> (cam.cameraType == CameraType.Preview || cam.cameraType == CameraType.Reflection ||</div>
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span>                cam.cameraType == CameraType.VR)</div>
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span>            {</div>
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span>                ClearCameraCommandBuffers();</div>
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span>            }</div>
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> </div>
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span>            UpdateCameraResolution(cam, renderPipelineRenderScale);</div>
<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> </div>
<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span>            <span class="keywordflow">if</span> (!cameraResources.ContainsKey(cam))</div>
<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span>            {</div>
<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span>                cameraResources[cam] = <span class="keyword">new</span> CameraResources();</div>
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span>            }</div>
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> </div>
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span>            <span class="comment">// Re-add command buffers to cameras with new injection points</span></div>
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a96a6f56e74c3c80dbbc8676e313bdd94">CurrentInjectionPoint</a> != ActiveInjectionPoint)</div>
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span>            {</div>
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span>                <span class="keywordflow">foreach</span> (KeyValuePair&lt;Camera, CommandBuffer&gt; entry <span class="keywordflow">in</span> cameraCBs)</div>
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span>                {</div>
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span>                    entry.Key.RemoveCommandBuffer(ActiveInjectionPoint, entry.Value);</div>
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span>                    entry.Key.AddCommandBuffer(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a96a6f56e74c3c80dbbc8676e313bdd94">CurrentInjectionPoint</a>, entry.Value);</div>
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span>                }</div>
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span>                ActiveInjectionPoint = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a96a6f56e74c3c80dbbc8676e313bdd94">CurrentInjectionPoint</a>;</div>
<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span>            }</div>
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span> </div>
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span>            <span class="keywordtype">bool</span> visibleInCamera =</div>
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span>                (<a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html">RenderPipelineDetector</a>.<a class="code hl_function" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html#af6ca78a99c6f090da4112d31624fbd08">GetRenderPipelineType</a>() != <a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html">RenderPipelineDetector</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html#a4b4059d56eb5d1eb4843d2d6c7ba77a7">RenderPipeline</a>.BuiltInRP) ||</div>
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span>                ((cam.cullingMask &amp; (1 &lt;&lt; <span class="keyword">this</span>.gameObject.layer)) != 0);</div>
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span> </div>
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span>            <span class="keywordflow">if</span> (!IsRenderingEnabled() || !visibleInCamera || materialParameters.SmokeMaterial == <span class="keyword">null</span> ||</div>
<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span>                materialParameters.ShadowProjectionMaterial == <span class="keyword">null</span> ||</div>
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span>                (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">EnableDownscale</a> &amp;&amp; materialParameters.UpscaleMaterial == <span class="keyword">null</span>))</div>
<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"> 1215</span>            {</div>
<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"> 1216</span>                <span class="keywordflow">if</span> (cameraCBs.ContainsKey(cam))</div>
<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"> 1217</span>                {</div>
<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span>                    cam.RemoveCommandBuffer(ActiveInjectionPoint, cameraCBs[cam]);</div>
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span>                    cameraCBs[cam].Clear();</div>
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span>                    cameraCBs.Remove(cam);</div>
<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span>                }</div>
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> </div>
<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"> 1223</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span>            }</div>
<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"> 1225</span> </div>
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span>            <span class="keywordtype">bool</span> isDirty = SetMaterialParams(cam);</div>
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span>            isDirty = UpdateNativeTextures(cam, renderPipelineRenderScale) || isDirty;</div>
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span>            isDirty = !cameraCBs.ContainsKey(cam) || isDirty;</div>
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span><span class="preprocessor">#if UNITY_EDITOR</span></div>
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span>            isDirty = isDirty || ForceRepaint;</div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> </div>
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span>            isDirty = isDirty || isSimulationContainerPositionChanged;</div>
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span>            InitializeNativeCameraParams(cam);</div>
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span>            UpdateCamera(cam);</div>
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> </div>
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span>            <span class="keywordflow">if</span> (<a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html">RenderPipelineDetector</a>.<a class="code hl_function" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html#af6ca78a99c6f090da4112d31624fbd08">GetRenderPipelineType</a>() == <a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html">RenderPipelineDetector</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html#a4b4059d56eb5d1eb4843d2d6c7ba77a7">RenderPipeline</a>.BuiltInRP)</div>
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span>            {</div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span>                <span class="keywordflow">if</span> (!cameraCBs.ContainsKey(cam) || isDirty)</div>
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span>                {</div>
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span>                    CommandBuffer renderCommandBuffer;</div>
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span>                    <span class="keywordflow">if</span> (isDirty &amp;&amp; cameraCBs.ContainsKey(cam))</div>
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span>                    {</div>
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span>                        renderCommandBuffer = cameraCBs[cam];</div>
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span>                        renderCommandBuffer.Clear();</div>
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span>                    }</div>
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span>                    <span class="keywordflow">else</span></div>
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span>                    {</div>
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span>                        <span class="comment">// Create render command buffer</span></div>
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span>                        renderCommandBuffer = <span class="keyword">new</span> CommandBuffer { name = <span class="stringliteral">&quot;ZibraSmokeAndFire.Render&quot;</span> };</div>
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span>                        <span class="comment">// add command buffer to camera</span></div>
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span>                        cam.AddCommandBuffer(ActiveInjectionPoint, renderCommandBuffer);</div>
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span>                        <span class="comment">// add camera to the list</span></div>
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span>                        cameraCBs[cam] = renderCommandBuffer;</div>
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span>                    }</div>
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span> </div>
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span>                    <span class="comment">// enable depth texture</span></div>
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span>                    cam.depthTextureMode = DepthTextureMode.Depth;</div>
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span> </div>
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span>                    <span class="comment">// update native camera parameters</span></div>
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span>                    RenderParticlesNative(renderCommandBuffer, cam);</div>
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span>                    RenderFluid(renderCommandBuffer, cam);</div>
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span>                }</div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span>            }</div>
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span>        }</div>
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> </div>
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> RenderCallBackWrapper(Camera cam)</div>
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span>        {</div>
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span>            RenderCallBack(cam);</div>
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span>        }</div>
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> </div>
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span>        <span class="keyword">internal</span> <span class="keywordtype">void</span> RenderFluid(CommandBuffer cmdBuffer, Camera cam, RenderTargetIdentifier? renderTargetParam = <span class="keyword">null</span>,</div>
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span>                                  RenderTargetIdentifier? depthTargetParam = <span class="keyword">null</span>, Rect? viewport = <span class="keyword">null</span>)</div>
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span>        {</div>
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span>            RenderTargetIdentifier renderTarget =</div>
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span>                renderTargetParam ??</div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span>                <span class="keyword">new</span> RenderTargetIdentifier(BuiltinRenderTextureType.CameraTarget, 0, CubemapFace.Unknown,</div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span>                                           RenderTargetIdentifier.AllDepthSlices);</div>
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> </div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span>            <span class="comment">// Render fluid to temporary RenderTexture if downscale enabled</span></div>
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span>            <span class="comment">// Otherwise render straight to final RenderTexture</span></div>
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">EnableDownscale</a>)</div>
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span>            {</div>
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span>                cmdBuffer.SetRenderTarget(UpscaleColor);</div>
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span>                cmdBuffer.ClearRenderTarget(<span class="keyword">true</span>, <span class="keyword">true</span>, Color.clear);</div>
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> </div>
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span>                RenderSmokeAndFireMain(cmdBuffer, cam, viewport);</div>
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span>            }</div>
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> </div>
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span>            <span class="keywordflow">if</span> (depthTargetParam != <span class="keyword">null</span>)</div>
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span>            {</div>
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span>                RenderTargetIdentifier depthTarget = depthTargetParam.Value;</div>
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span>                cmdBuffer.SetRenderTarget(renderTarget, depthTarget, 0, CubemapFace.Unknown,</div>
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span>                                          RenderTargetIdentifier.AllDepthSlices);</div>
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span>            }</div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span>            {</div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span>                cmdBuffer.SetRenderTarget(renderTarget);</div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span>            }</div>
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> </div>
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span>            RenderSmokeShadows(cmdBuffer, cam, viewport); <span class="comment">// smoke shadows should not be affected by downscale</span></div>
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span> </div>
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">EnableDownscale</a>)</div>
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span>                UpscaleSmokeAndFireDirect(cmdBuffer, cam, <span class="keyword">null</span>, <span class="keyword">null</span>, viewport);</div>
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span>                RenderSmokeAndFireMain(cmdBuffer, cam, viewport);</div>
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span>        }</div>
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> </div>
<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span>        <span class="keyword">internal</span> <span class="keywordtype">void</span> RenderParticlesNative(CommandBuffer cmdBuffer, Camera cam, <span class="keywordtype">bool</span> isTextureArray = <span class="keyword">false</span>)</div>
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span>        {</div>
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span>            <span class="keywordflow">if</span> (cam.stereoEnabled)</div>
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span>            {</div>
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span>                <span class="keywordflow">return</span>; <span class="comment">// rendering particles in stereo is not supported</span></div>
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span>            }</div>
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> </div>
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span>            ForceCloseCommandEncoder(cmdBuffer);</div>
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> </div>
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span>            <span class="keywordflow">if</span> (isTextureArray)</div>
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span>            {</div>
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span>                <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute.EnableKeyword(<span class="stringliteral">&quot;INPUT_2D_ARRAY&quot;</span>);</div>
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span>            }</div>
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span>            {</div>
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span>                <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute.DisableKeyword(<span class="stringliteral">&quot;INPUT_2D_ARRAY&quot;</span>);</div>
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span>            }</div>
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> </div>
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span>            cmdBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, CopyDepthID, <span class="stringliteral">&quot;DepthDest&quot;</span>, DepthTexture);</div>
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span>            cmdBuffer.DispatchCompute(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, CopyDepthID, IntDivCeil(cam.pixelWidth, DEPTH_COPY_WORKGROUP),</div>
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span>                                      IntDivCeil(cam.pixelHeight, DEPTH_COPY_WORKGROUP), 1);</div>
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> </div>
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span>            UpdateNativeRenderParams(cmdBuffer, cam);</div>
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span>            <span class="keywordflow">if</span> (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Vulkan)</div>
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span>            {</div>
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span>                cmdBuffer.SetRenderTarget(ParticlesRT, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.Store);</div>
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span>                cmdBuffer.ClearRenderTarget(<span class="keyword">true</span>, <span class="keyword">true</span>, Color.clear);</div>
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span>            }</div>
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span>            SmokeAndFireBridge.SubmitInstanceEvent(cmdBuffer, CurrentInstanceID, SmokeAndFireBridge.EventID.Draw);</div>
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span>        }</div>
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> </div>
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> RenderSmokeAndFire(CommandBuffer cmdBuffer, Camera cam, Rect? viewport = <span class="keyword">null</span>)</div>
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span>        {</div>
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span>            Vector2Int cameraRenderResolution = camRenderResolutions[cam];</div>
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span> </div>
<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span>            Material CurrentMaterial = cameraResources[cam].smokeAndFireMaterial.currentMaterial;</div>
<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"> 1355</span> </div>
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span>            <span class="comment">// Render fluid to temporary RenderTexture if downscale enabled</span></div>
<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span>            <span class="comment">// Otherwise render straight to final RenderTexture</span></div>
<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">EnableDownscale</a>)</div>
<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span>            {</div>
<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span>                cmdBuffer.SetViewport(<span class="keyword">new</span> Rect(0, 0, cameraRenderResolution.x, cameraRenderResolution.y));</div>
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span>            }</div>
<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span>            {</div>
<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"> 1364</span>                <span class="keywordflow">if</span> (viewport != <span class="keyword">null</span>)</div>
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span>                {</div>
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span>                    cmdBuffer.SetViewport(viewport.Value);</div>
<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span>                }</div>
<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"> 1368</span>            }</div>
<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span> </div>
<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span>            cmdBuffer.SetGlobalTexture(<span class="stringliteral">&quot;ParticlesTex&quot;</span>, ParticlesRT);</div>
<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"> 1371</span> </div>
<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span>            cmdBuffer.DrawMesh(renderQuad, Matrix4x4.identity, CurrentMaterial, 0, 0);</div>
<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span>        }</div>
<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span> </div>
<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> RenderSmokeShadows(CommandBuffer cmdBuffer, Camera cam, Rect? viewport = <span class="keyword">null</span>)</div>
<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"> 1381</span>        {</div>
<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"> 1382</span>            <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#aa5609a0a41992bd3941faac8986189d0">EnableProjectedShadows</a>)</div>
<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span>            {</div>
<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"> 1384</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span>            }</div>
<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span> </div>
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span>            Vector2Int cameraRenderResolution = camRenderResolutions[cam];</div>
<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span> </div>
<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span>            <span class="keywordflow">if</span> (viewport != <span class="keyword">null</span>)</div>
<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span>            {</div>
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span>                cmdBuffer.SetViewport(viewport.Value);</div>
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span>            }</div>
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span> </div>
<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span>            Material CurrentMaterial = cameraResources[cam].smokeShadowProjectionMaterial.currentMaterial;</div>
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span> </div>
<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"> 1396</span>            cmdBuffer.DrawMesh(renderQuad, Matrix4x4.identity, CurrentMaterial, 0, 0);</div>
<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span>        }</div>
<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> </div>
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> Illumination()</div>
<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span>        {</div>
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span>            solverCommandBuffer.Clear();</div>
<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> </div>
<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span>            solverCommandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ContainerScale&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>);</div>
<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span>            solverCommandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ContainerPosition&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a60f1ebf5864cafb3a02fb0441724bb71">SimulationContainerPosition</a>);</div>
<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span>            solverCommandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;GridSize&quot;</span>, (Vector3)<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>);</div>
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span>            solverCommandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ShadowGridSize&quot;</span>, (Vector3)ShadowGridSize);</div>
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span>            solverCommandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;LightGridSize&quot;</span>, (Vector3)LightGridSize);</div>
<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span>            solverCommandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ShadowColor&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a2cff1b1346b0392dc707f0065b823349">ShadowAbsorptionColor</a>);</div>
<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span>            solverCommandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ScatteringColor&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a963de9a74a3301001bd3e2eb77294001">ScatteringColor</a>);</div>
<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"> 1410</span>            solverCommandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;LightColor&quot;</span>, GetLightColor(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a513906c0545ef4c34563175adb79277f">MainLight</a>));</div>
<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"> 1411</span>            solverCommandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;LightDirWorld&quot;</span>,</div>
<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"> 1412</span>                                                      <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a513906c0545ef4c34563175adb79277f">MainLight</a>.transform.rotation * <span class="keyword">new</span> Vector3(0, 0, -1));</div>
<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span> </div>
<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span>            <span class="keywordtype">int</span> mainLightMode = MainLight.enabled ? 1 : 0;</div>
<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span>            Vector4[] lightColors = <span class="keyword">new</span> Vector4[MAX_LIGHT_COUNT];</div>
<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"> 1416</span>            Vector4[] lightPositions = <span class="keyword">new</span> Vector4[MAX_LIGHT_COUNT];</div>
<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span>            <span class="keywordtype">int</span> lightCount = GetLights(ref lightColors, ref lightPositions, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a75369b39a836c0b51f37ddc08a9e3eca">IlluminationBrightness</a>);</div>
<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span> </div>
<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"> 1419</span>            solverCommandBuffer.SetComputeVectorArrayParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;LightColorArray&quot;</span>, lightColors);</div>
<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span>            solverCommandBuffer.SetComputeVectorArrayParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;LightPositionArray&quot;</span>, lightPositions);</div>
<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span>            solverCommandBuffer.SetComputeIntParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;LightCount&quot;</span>, lightCount);</div>
<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span>            solverCommandBuffer.SetComputeIntParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;MainLightMode&quot;</span>, mainLightMode);</div>
<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"> 1423</span>            solverCommandBuffer.SetComputeIntParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;SimulationMode&quot;</span>, (<span class="keywordtype">int</span>)<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6d4293288031a149d20f7884389e1505">ActiveSimulationMode</a>);</div>
<div class="line"><a id="l01424" name="l01424"></a><span class="lineno"> 1424</span> </div>
<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"> 1425</span>            solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;IlluminationSoftness&quot;</span>,</div>
<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span>                                                     <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a9d605862c5da47de09e2ba1e73c3f730">IlluminationSoftness</a>);</div>
<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"> 1427</span>            solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;SmokeDensity&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a314f489e56fc4099b92ba4ced2e23b93">SmokeDensity</a>);</div>
<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"> 1428</span>            solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;FuelDensity&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a14e138c314413407cff5c51c3014b14a">FuelDensity</a>);</div>
<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span>            solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ShadowIntensity&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a7945a66501e6d3f4ad6b5d2315e0f7f3">ShadowIntensity</a>);</div>
<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span>            solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;FireBrightness&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a3cd49963a4e4f4a6a1478e3790fb2073">FireBrightness</a>);</div>
<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"> 1431</span>            solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;BlackBodyBrightness&quot;</span>,</div>
<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span>                                                     <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a3cd78cd2f366cb4b12414af882fe6aa0">BlackBodyBrightness</a>);</div>
<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span>            solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ReactionSpeed&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a352824b3cf246e3b5e6d132d4626ecf7">ReactionSpeed</a>);</div>
<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span>            solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;TempThreshold&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#ac6da9dedc2700689e9b7888cc5fcf9f8">TempThreshold</a>);</div>
<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span>            solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;TemperatureDensityDependence&quot;</span>,</div>
<div class="line"><a id="l01436" name="l01436"></a><span class="lineno"> 1436</span>                                                     <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a96cc752b1e70b97f1aee6d5e8b39e238">TemperatureDensityDependence</a>);</div>
<div class="line"><a id="l01437" name="l01437"></a><span class="lineno"> 1437</span>            solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ScatteringAttenuation&quot;</span>,</div>
<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"> 1438</span>                                                     <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a6009866bc671eeea31109f2c54382dd2">ScatteringAttenuation</a>);</div>
<div class="line"><a id="l01439" name="l01439"></a><span class="lineno"> 1439</span>            solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ScatteringContribution&quot;</span>,</div>
<div class="line"><a id="l01440" name="l01440"></a><span class="lineno"> 1440</span>                                                     <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a6e51f3b002b227dc187dcd475848d6ae">ScatteringContribution</a>);</div>
<div class="line"><a id="l01441" name="l01441"></a><span class="lineno"> 1441</span>            solverCommandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;FireColor&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#ae66686cc1b7b7432b067958d1af2852c">FireColor</a>);</div>
<div class="line"><a id="l01442" name="l01442"></a><span class="lineno"> 1442</span> </div>
<div class="line"><a id="l01443" name="l01443"></a><span class="lineno"> 1443</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a513906c0545ef4c34563175adb79277f">MainLight</a>.enabled)</div>
<div class="line"><a id="l01444" name="l01444"></a><span class="lineno"> 1444</span>            {</div>
<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"> 1445</span>                solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ShadowStepSize&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a8c2bc6a9913661a1c77bea585f3a3021">ShadowStepSize</a>);</div>
<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span>                solverCommandBuffer.SetComputeIntParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ShadowMaxSteps&quot;</span>, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#acb5e34534b919693bcf7992a9c41a9a1">ShadowMaxSteps</a>);</div>
<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"> 1447</span> </div>
<div class="line"><a id="l01448" name="l01448"></a><span class="lineno"> 1448</span>                <span class="keywordflow">if</span> (GridDownscale &gt; 1)</div>
<div class="line"><a id="l01449" name="l01449"></a><span class="lineno"> 1449</span>                {</div>
<div class="line"><a id="l01450" name="l01450"></a><span class="lineno"> 1450</span>                    solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, ShadowmapID, <span class="stringliteral">&quot;Density&quot;</span>, RenderDensityLOD);</div>
<div class="line"><a id="l01451" name="l01451"></a><span class="lineno"> 1451</span>                }</div>
<div class="line"><a id="l01452" name="l01452"></a><span class="lineno"> 1452</span>                <span class="keywordflow">else</span></div>
<div class="line"><a id="l01453" name="l01453"></a><span class="lineno"> 1453</span>                {</div>
<div class="line"><a id="l01454" name="l01454"></a><span class="lineno"> 1454</span>                    solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, ShadowmapID, <span class="stringliteral">&quot;Density&quot;</span>, RenderDensity);</div>
<div class="line"><a id="l01455" name="l01455"></a><span class="lineno"> 1455</span>                }</div>
<div class="line"><a id="l01456" name="l01456"></a><span class="lineno"> 1456</span> </div>
<div class="line"><a id="l01457" name="l01457"></a><span class="lineno"> 1457</span>                solverCommandBuffer.SetComputeIntParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;DensityDownscale&quot;</span>, GridDownscale);</div>
<div class="line"><a id="l01458" name="l01458"></a><span class="lineno"> 1458</span>                solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, ShadowmapID, <span class="stringliteral">&quot;Color&quot;</span>, RenderColor);</div>
<div class="line"><a id="l01459" name="l01459"></a><span class="lineno"> 1459</span>                solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, ShadowmapID, <span class="stringliteral">&quot;BlueNoise&quot;</span>,</div>
<div class="line"><a id="l01460" name="l01460"></a><span class="lineno"> 1460</span>                                                           <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.BlueNoise);</div>
<div class="line"><a id="l01461" name="l01461"></a><span class="lineno"> 1461</span>                solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, ShadowmapID, <span class="stringliteral">&quot;ShadowmapOUT&quot;</span>, Shadowmap);</div>
<div class="line"><a id="l01462" name="l01462"></a><span class="lineno"> 1462</span>                solverCommandBuffer.DispatchCompute(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, ShadowmapID, ShadowWorkGroupsXYZ.x, ShadowWorkGroupsXYZ.y,</div>
<div class="line"><a id="l01463" name="l01463"></a><span class="lineno"> 1463</span>                                                    ShadowWorkGroupsXYZ.z);</div>
<div class="line"><a id="l01464" name="l01464"></a><span class="lineno"> 1464</span>            }</div>
<div class="line"><a id="l01465" name="l01465"></a><span class="lineno"> 1465</span> </div>
<div class="line"><a id="l01466" name="l01466"></a><span class="lineno"> 1466</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a8fd6b7f69ecca3dc73e75ccb30100de4">Lights</a>.Count &gt; 0)</div>
<div class="line"><a id="l01467" name="l01467"></a><span class="lineno"> 1467</span>            {</div>
<div class="line"><a id="l01468" name="l01468"></a><span class="lineno"> 1468</span>                solverCommandBuffer.SetComputeFloatParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ShadowStepSize&quot;</span>,</div>
<div class="line"><a id="l01469" name="l01469"></a><span class="lineno"> 1469</span>                                                         <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a3d90a06eca77162239ec79c0de24c469">IlluminationStepSize</a>);</div>
<div class="line"><a id="l01470" name="l01470"></a><span class="lineno"> 1470</span>                solverCommandBuffer.SetComputeIntParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;ShadowMaxSteps&quot;</span>,</div>
<div class="line"><a id="l01471" name="l01471"></a><span class="lineno"> 1471</span>                                                       <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a9abffea1f85321531faee176a07e1852">IlluminationMaxSteps</a>);</div>
<div class="line"><a id="l01472" name="l01472"></a><span class="lineno"> 1472</span> </div>
<div class="line"><a id="l01473" name="l01473"></a><span class="lineno"> 1473</span>                <span class="keywordflow">if</span> (GridDownscale &gt; 1)</div>
<div class="line"><a id="l01474" name="l01474"></a><span class="lineno"> 1474</span>                {</div>
<div class="line"><a id="l01475" name="l01475"></a><span class="lineno"> 1475</span>                    solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, LightmapID, <span class="stringliteral">&quot;Density&quot;</span>, RenderDensityLOD);</div>
<div class="line"><a id="l01476" name="l01476"></a><span class="lineno"> 1476</span>                }</div>
<div class="line"><a id="l01477" name="l01477"></a><span class="lineno"> 1477</span>                <span class="keywordflow">else</span></div>
<div class="line"><a id="l01478" name="l01478"></a><span class="lineno"> 1478</span>                {</div>
<div class="line"><a id="l01479" name="l01479"></a><span class="lineno"> 1479</span>                    solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, LightmapID, <span class="stringliteral">&quot;Density&quot;</span>, RenderDensity);</div>
<div class="line"><a id="l01480" name="l01480"></a><span class="lineno"> 1480</span>                }</div>
<div class="line"><a id="l01481" name="l01481"></a><span class="lineno"> 1481</span> </div>
<div class="line"><a id="l01482" name="l01482"></a><span class="lineno"> 1482</span>                solverCommandBuffer.SetComputeIntParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;DensityDownscale&quot;</span>, GridDownscale);</div>
<div class="line"><a id="l01483" name="l01483"></a><span class="lineno"> 1483</span>                solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, LightmapID, <span class="stringliteral">&quot;Color&quot;</span>, RenderColor);</div>
<div class="line"><a id="l01484" name="l01484"></a><span class="lineno"> 1484</span>                solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, LightmapID, <span class="stringliteral">&quot;BlueNoise&quot;</span>,</div>
<div class="line"><a id="l01485" name="l01485"></a><span class="lineno"> 1485</span>                                                           <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.BlueNoise);</div>
<div class="line"><a id="l01486" name="l01486"></a><span class="lineno"> 1486</span>                solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, LightmapID, <span class="stringliteral">&quot;LightmapOUT&quot;</span>, Lightmap);</div>
<div class="line"><a id="l01487" name="l01487"></a><span class="lineno"> 1487</span>                solverCommandBuffer.DispatchCompute(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, LightmapID, LightWorkGroupsXYZ.x, LightWorkGroupsXYZ.y,</div>
<div class="line"><a id="l01488" name="l01488"></a><span class="lineno"> 1488</span>                                                    LightWorkGroupsXYZ.z);</div>
<div class="line"><a id="l01489" name="l01489"></a><span class="lineno"> 1489</span>            }</div>
<div class="line"><a id="l01490" name="l01490"></a><span class="lineno"> 1490</span> </div>
<div class="line"><a id="l01491" name="l01491"></a><span class="lineno"> 1491</span>            solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, IlluminationID, <span class="stringliteral">&quot;Density&quot;</span>, RenderDensity);</div>
<div class="line"><a id="l01492" name="l01492"></a><span class="lineno"> 1492</span>            solverCommandBuffer.SetComputeIntParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, <span class="stringliteral">&quot;DensityDownscale&quot;</span>, 1);</div>
<div class="line"><a id="l01493" name="l01493"></a><span class="lineno"> 1493</span>            solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, IlluminationID, <span class="stringliteral">&quot;Shadowmap&quot;</span>, Shadowmap);</div>
<div class="line"><a id="l01494" name="l01494"></a><span class="lineno"> 1494</span>            solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, IlluminationID, <span class="stringliteral">&quot;Lightmap&quot;</span>, Lightmap);</div>
<div class="line"><a id="l01495" name="l01495"></a><span class="lineno"> 1495</span>            solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, IlluminationID, <span class="stringliteral">&quot;Color&quot;</span>, RenderColor);</div>
<div class="line"><a id="l01496" name="l01496"></a><span class="lineno"> 1496</span>            solverCommandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, IlluminationID, <span class="stringliteral">&quot;IlluminationOUT&quot;</span>, RenderIllumination);</div>
<div class="line"><a id="l01497" name="l01497"></a><span class="lineno"> 1497</span>            solverCommandBuffer.DispatchCompute(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute, IlluminationID, WorkGroupsXYZ.x, WorkGroupsXYZ.y,</div>
<div class="line"><a id="l01498" name="l01498"></a><span class="lineno"> 1498</span>                                                WorkGroupsXYZ.z);</div>
<div class="line"><a id="l01499" name="l01499"></a><span class="lineno"> 1499</span> </div>
<div class="line"><a id="l01500" name="l01500"></a><span class="lineno"> 1500</span>            Graphics.ExecuteCommandBuffer(solverCommandBuffer);</div>
<div class="line"><a id="l01501" name="l01501"></a><span class="lineno"> 1501</span> </div>
<div class="line"><a id="l01502" name="l01502"></a><span class="lineno"> 1502</span>            solverCommandBuffer.Clear();</div>
<div class="line"><a id="l01503" name="l01503"></a><span class="lineno"> 1503</span>        }</div>
<div class="line"><a id="l01504" name="l01504"></a><span class="lineno"> 1504</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l01505" name="l01505"></a><span class="lineno"> 1505</span> </div>
<div class="line"><a id="l01506" name="l01506"></a><span class="lineno"> 1506</span><span class="preprocessor">#region Initialisation</span></div>
<div class="line"><a id="l01507" name="l01507"></a><span class="lineno"> 1507</span> </div>
<div class="line"><a id="l01508" name="l01508"></a><span class="lineno"> 1508</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> Init()</div>
<div class="line"><a id="l01509" name="l01509"></a><span class="lineno"> 1509</span>        {</div>
<div class="line"><a id="l01510" name="l01510"></a><span class="lineno"> 1510</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a>)</div>
<div class="line"><a id="l01511" name="l01511"></a><span class="lineno"> 1511</span>            {</div>
<div class="line"><a id="l01512" name="l01512"></a><span class="lineno"> 1512</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01513" name="l01513"></a><span class="lineno"> 1513</span>            }</div>
<div class="line"><a id="l01514" name="l01514"></a><span class="lineno"> 1514</span> </div>
<div class="line"><a id="l01515" name="l01515"></a><span class="lineno"> 1515</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a513906c0545ef4c34563175adb79277f">MainLight</a> == <span class="keyword">null</span>)</div>
<div class="line"><a id="l01516" name="l01516"></a><span class="lineno"> 1516</span>            {</div>
<div class="line"><a id="l01517" name="l01517"></a><span class="lineno"> 1517</span>                <span class="keywordflow">throw</span> <span class="keyword">new</span> Exception(<span class="stringliteral">&quot;The main light isn&#39;t assigned. SmokeAndFire was disabled.&quot;</span>);</div>
<div class="line"><a id="l01518" name="l01518"></a><span class="lineno"> 1518</span>            }</div>
<div class="line"><a id="l01519" name="l01519"></a><span class="lineno"> 1519</span>            </div>
<div class="line"><a id="l01520" name="l01520"></a><span class="lineno"> 1520</span>            <span class="keywordtype">bool</span> isDeviceSupported = SmokeAndFireBridge.ZibraSmokeAndFire_IsHardwareSupported();</div>
<div class="line"><a id="l01521" name="l01521"></a><span class="lineno"> 1521</span>            <span class="keywordflow">if</span> (!isDeviceSupported)</div>
<div class="line"><a id="l01522" name="l01522"></a><span class="lineno"> 1522</span>            {</div>
<div class="line"><a id="l01523" name="l01523"></a><span class="lineno"> 1523</span>                <span class="keywordflow">throw</span> <span class="keyword">new</span> Exception(<span class="stringliteral">&quot;Zibra Smoke &amp; Fire doesn&#39;t support this hardware. SmokeAndFire was disabled.&quot;</span>);</div>
<div class="line"><a id="l01524" name="l01524"></a><span class="lineno"> 1524</span>            }</div>
<div class="line"><a id="l01525" name="l01525"></a><span class="lineno"> 1525</span> </div>
<div class="line"><a id="l01526" name="l01526"></a><span class="lineno"> 1526</span>            <span class="keywordflow">try</span></div>
<div class="line"><a id="l01527" name="l01527"></a><span class="lineno"> 1527</span>            {</div>
<div class="line"><a id="l01528" name="l01528"></a><span class="lineno"> 1528</span><span class="preprocessor">#if !ZIBRA_EFFECTS_NO_LICENSE_CHECK &amp;&amp; UNITY_EDITOR</span></div>
<div class="line"><a id="l01529" name="l01529"></a><span class="lineno"> 1529</span>                <span class="keywordflow">if</span> (!<a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html">ServerAuthManager</a>.<a class="code hl_function" href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html#a4e698e47214df7a64446630702660cd1">GetInstance</a>().<a class="code hl_function" href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html#a5cccd710313a9659a49c23a2ecd05ed1">IsLicenseVerified</a>(<a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html">ServerAuthManager</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html#acd9c2a1cf576f0fd9da232d337d9720c">Effect</a>.Smoke))</div>
<div class="line"><a id="l01530" name="l01530"></a><span class="lineno"> 1530</span>                {</div>
<div class="line"><a id="l01531" name="l01531"></a><span class="lineno"> 1531</span>                    <span class="keywordtype">string</span> errorMessage =</div>
<div class="line"><a id="l01532" name="l01532"></a><span class="lineno"> 1532</span>                        <span class="stringliteral">&quot;License wasn&#39;t verified. &quot;</span> +</div>
<div class="line"><a id="l01533" name="l01533"></a><span class="lineno"> 1533</span>                        <a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html">ServerAuthManager</a>.<a class="code hl_function" href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html#a4e698e47214df7a64446630702660cd1">GetInstance</a>().<a class="code hl_function" href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html#ad699d519d196e8619bc155a65c7fdac2">GetErrorMessage</a>(<a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html">ServerAuthManager</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html#acd9c2a1cf576f0fd9da232d337d9720c">Effect</a>.Smoke) +</div>
<div class="line"><a id="l01534" name="l01534"></a><span class="lineno"> 1534</span>                        <span class="stringliteral">&quot; Smoke &amp; Fire won&#39;t run in editor.&quot;</span>;</div>
<div class="line"><a id="l01535" name="l01535"></a><span class="lineno"> 1535</span>                    <span class="keywordflow">throw</span> <span class="keyword">new</span> Exception(errorMessage);</div>
<div class="line"><a id="l01536" name="l01536"></a><span class="lineno"> 1536</span>                }</div>
<div class="line"><a id="l01537" name="l01537"></a><span class="lineno"> 1537</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01538" name="l01538"></a><span class="lineno"> 1538</span> </div>
<div class="line"><a id="l01539" name="l01539"></a><span class="lineno"> 1539</span><span class="preprocessor">#if UNITY_PIPELINE_HDRP</span></div>
<div class="line"><a id="l01540" name="l01540"></a><span class="lineno"> 1540</span>                <span class="keywordflow">if</span> (<a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html">RenderPipelineDetector</a>.<a class="code hl_function" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html#af6ca78a99c6f090da4112d31624fbd08">GetRenderPipelineType</a>() == <a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html">RenderPipelineDetector</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html#a4b4059d56eb5d1eb4843d2d6c7ba77a7">RenderPipeline</a>.HDRP)</div>
<div class="line"><a id="l01541" name="l01541"></a><span class="lineno"> 1541</span>                {</div>
<div class="line"><a id="l01542" name="l01542"></a><span class="lineno"> 1542</span>                    <span class="keywordtype">bool</span> missingRequiredParameter = <span class="keyword">false</span>;</div>
<div class="line"><a id="l01543" name="l01543"></a><span class="lineno"> 1543</span> </div>
<div class="line"><a id="l01544" name="l01544"></a><span class="lineno"> 1544</span>                    <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a513906c0545ef4c34563175adb79277f">MainLight</a> == <span class="keyword">null</span>)</div>
<div class="line"><a id="l01545" name="l01545"></a><span class="lineno"> 1545</span>                    {</div>
<div class="line"><a id="l01546" name="l01546"></a><span class="lineno"> 1546</span>                        Debug.LogError(<span class="stringliteral">&quot;No Custom Light set in Zibra Smoke &amp; Fire.&quot;</span>);</div>
<div class="line"><a id="l01547" name="l01547"></a><span class="lineno"> 1547</span>                        missingRequiredParameter = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01548" name="l01548"></a><span class="lineno"> 1548</span>                    }</div>
<div class="line"><a id="l01549" name="l01549"></a><span class="lineno"> 1549</span> </div>
<div class="line"><a id="l01550" name="l01550"></a><span class="lineno"> 1550</span>                    <span class="keywordflow">if</span> (missingRequiredParameter)</div>
<div class="line"><a id="l01551" name="l01551"></a><span class="lineno"> 1551</span>                    {</div>
<div class="line"><a id="l01552" name="l01552"></a><span class="lineno"> 1552</span>                        <span class="keywordflow">throw</span> <span class="keyword">new</span> Exception(<span class="stringliteral">&quot;Smoke &amp; Fire creation failed due to missing parameter.&quot;</span>);</div>
<div class="line"><a id="l01553" name="l01553"></a><span class="lineno"> 1553</span>                    }</div>
<div class="line"><a id="l01554" name="l01554"></a><span class="lineno"> 1554</span>                }</div>
<div class="line"><a id="l01555" name="l01555"></a><span class="lineno"> 1555</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01556" name="l01556"></a><span class="lineno"> 1556</span> </div>
<div class="line"><a id="l01557" name="l01557"></a><span class="lineno"> 1557</span>                ValidateManipulators();</div>
<div class="line"><a id="l01558" name="l01558"></a><span class="lineno"> 1558</span> </div>
<div class="line"><a id="l01559" name="l01559"></a><span class="lineno"> 1559</span>                <span class="keywordtype">bool</span> haveEmitter = <span class="keyword">false</span>;</div>
<div class="line"><a id="l01560" name="l01560"></a><span class="lineno"> 1560</span>                <span class="keywordflow">foreach</span> (var manipulator <span class="keywordflow">in</span> Manipulators)</div>
<div class="line"><a id="l01561" name="l01561"></a><span class="lineno"> 1561</span>                {</div>
<div class="line"><a id="l01562" name="l01562"></a><span class="lineno"> 1562</span>                    <span class="keywordflow">if</span> ((manipulator.GetManipulatorType() == <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html">Manipulator</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html#a57c404a5c07698ea543d2d900d60c282">ManipulatorType</a>.Emitter ||</div>
<div class="line"><a id="l01563" name="l01563"></a><span class="lineno"> 1563</span>                         manipulator.GetManipulatorType() == <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html">Manipulator</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html#a57c404a5c07698ea543d2d900d60c282">ManipulatorType</a>.TextureEmitter) &amp;&amp;</div>
<div class="line"><a id="l01564" name="l01564"></a><span class="lineno"> 1564</span>                        manipulator.GetComponent&lt;<a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_s_d_f_objects_1_1_s_d_f_object.html">SDFObject</a>&gt;() != <span class="keyword">null</span>)</div>
<div class="line"><a id="l01565" name="l01565"></a><span class="lineno"> 1565</span>                    {</div>
<div class="line"><a id="l01566" name="l01566"></a><span class="lineno"> 1566</span>                        haveEmitter = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01567" name="l01567"></a><span class="lineno"> 1567</span>                        <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01568" name="l01568"></a><span class="lineno"> 1568</span>                    }</div>
<div class="line"><a id="l01569" name="l01569"></a><span class="lineno"> 1569</span>                }</div>
<div class="line"><a id="l01570" name="l01570"></a><span class="lineno"> 1570</span> </div>
<div class="line"><a id="l01571" name="l01571"></a><span class="lineno"> 1571</span>                <span class="keywordflow">if</span> (!haveEmitter)</div>
<div class="line"><a id="l01572" name="l01572"></a><span class="lineno"> 1572</span>                {</div>
<div class="line"><a id="l01573" name="l01573"></a><span class="lineno"> 1573</span>                    <span class="keywordflow">throw</span> <span class="keyword">new</span> Exception(</div>
<div class="line"><a id="l01574" name="l01574"></a><span class="lineno"> 1574</span>                        <span class="stringliteral">&quot;Smoke &amp; Fire creation failed. Simulation has no emitters, or all emitters are missing SDF component.&quot;</span>);</div>
<div class="line"><a id="l01575" name="l01575"></a><span class="lineno"> 1575</span>                }</div>
<div class="line"><a id="l01576" name="l01576"></a><span class="lineno"> 1576</span> </div>
<div class="line"><a id="l01577" name="l01577"></a><span class="lineno"> 1577</span>                Camera.onPreRender += RenderCallBackWrapper;</div>
<div class="line"><a id="l01578" name="l01578"></a><span class="lineno"> 1578</span> </div>
<div class="line"><a id="l01579" name="l01579"></a><span class="lineno"> 1579</span>                solverCommandBuffer = <span class="keyword">new</span> CommandBuffer { name = <span class="stringliteral">&quot;ZibraSmokeAndFire.Solver&quot;</span> };</div>
<div class="line"><a id="l01580" name="l01580"></a><span class="lineno"> 1580</span>                <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6d4293288031a149d20f7884389e1505">ActiveSimulationMode</a> = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ac4792d27f7e5e4a3fc2337191231011a">CurrentSimulationMode</a>;</div>
<div class="line"><a id="l01581" name="l01581"></a><span class="lineno"> 1581</span> </div>
<div class="line"><a id="l01582" name="l01582"></a><span class="lineno"> 1582</span>                CurrentInstanceID = ms_NextInstanceId++;</div>
<div class="line"><a id="l01583" name="l01583"></a><span class="lineno"> 1583</span> </div>
<div class="line"><a id="l01584" name="l01584"></a><span class="lineno"> 1584</span>                ForceCloseCommandEncoder(solverCommandBuffer);</div>
<div class="line"><a id="l01585" name="l01585"></a><span class="lineno"> 1585</span>                SmokeAndFireBridge.SubmitInstanceEvent(solverCommandBuffer, CurrentInstanceID,</div>
<div class="line"><a id="l01586" name="l01586"></a><span class="lineno"> 1586</span>                                                       SmokeAndFireBridge.EventID.CreateFluidInstance);</div>
<div class="line"><a id="l01587" name="l01587"></a><span class="lineno"> 1587</span>                Graphics.ExecuteCommandBuffer(solverCommandBuffer);</div>
<div class="line"><a id="l01588" name="l01588"></a><span class="lineno"> 1588</span>                solverCommandBuffer.Clear();</div>
<div class="line"><a id="l01589" name="l01589"></a><span class="lineno"> 1589</span> </div>
<div class="line"><a id="l01590" name="l01590"></a><span class="lineno"> 1590</span>                InitializeSolver();</div>
<div class="line"><a id="l01591" name="l01591"></a><span class="lineno"> 1591</span> </div>
<div class="line"><a id="l01592" name="l01592"></a><span class="lineno"> 1592</span>                var initializeGPUReadbackParamsBridgeParams = <span class="keyword">new</span> InitializeGPUReadbackParams();</div>
<div class="line"><a id="l01593" name="l01593"></a><span class="lineno"> 1593</span>                UInt32 manipSize = (UInt32)ManipulatorManager.Elements * STATISTICS_PER_MANIPULATOR * <span class="keyword">sizeof</span>(Int32);</div>
<div class="line"><a id="l01594" name="l01594"></a><span class="lineno"> 1594</span> </div>
<div class="line"><a id="l01595" name="l01595"></a><span class="lineno"> 1595</span>                initializeGPUReadbackParamsBridgeParams.readbackBufferSize = manipSize;</div>
<div class="line"><a id="l01596" name="l01596"></a><span class="lineno"> 1596</span>                <span class="keywordflow">switch</span> (SystemInfo.graphicsDeviceType)</div>
<div class="line"><a id="l01597" name="l01597"></a><span class="lineno"> 1597</span>                {</div>
<div class="line"><a id="l01598" name="l01598"></a><span class="lineno"> 1598</span>                <span class="keywordflow">case</span> GraphicsDeviceType.Direct3D11:</div>
<div class="line"><a id="l01599" name="l01599"></a><span class="lineno"> 1599</span>                <span class="keywordflow">case</span> GraphicsDeviceType.XboxOne:</div>
<div class="line"><a id="l01600" name="l01600"></a><span class="lineno"> 1600</span>                <span class="keywordflow">case</span> GraphicsDeviceType.Switch:</div>
<div class="line"><a id="l01601" name="l01601"></a><span class="lineno"> 1601</span><span class="preprocessor">#if UNITY_2020_3_OR_NEWER</span></div>
<div class="line"><a id="l01602" name="l01602"></a><span class="lineno"> 1602</span>                <span class="keywordflow">case</span> GraphicsDeviceType.Direct3D12:</div>
<div class="line"><a id="l01603" name="l01603"></a><span class="lineno"> 1603</span>                <span class="keywordflow">case</span> GraphicsDeviceType.XboxOneD3D12:</div>
<div class="line"><a id="l01604" name="l01604"></a><span class="lineno"> 1604</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01605" name="l01605"></a><span class="lineno"> 1605</span>                    initializeGPUReadbackParamsBridgeParams.maxFramesInFlight = QualitySettings.maxQueuedFrames + 1;</div>
<div class="line"><a id="l01606" name="l01606"></a><span class="lineno"> 1606</span>                    <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01607" name="l01607"></a><span class="lineno"> 1607</span>                <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01608" name="l01608"></a><span class="lineno"> 1608</span>                    initializeGPUReadbackParamsBridgeParams.maxFramesInFlight = (int)this.MaxFramesInFlight;</div>
<div class="line"><a id="l01609" name="l01609"></a><span class="lineno"> 1609</span>                    <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01610" name="l01610"></a><span class="lineno"> 1610</span>                }</div>
<div class="line"><a id="l01611" name="l01611"></a><span class="lineno"> 1611</span> </div>
<div class="line"><a id="l01612" name="l01612"></a><span class="lineno"> 1612</span>                IntPtr nativeCreateInstanceBridgeParams =</div>
<div class="line"><a id="l01613" name="l01613"></a><span class="lineno"> 1613</span>                    Marshal.AllocHGlobal(Marshal.SizeOf(initializeGPUReadbackParamsBridgeParams));</div>
<div class="line"><a id="l01614" name="l01614"></a><span class="lineno"> 1614</span>                Marshal.StructureToPtr(initializeGPUReadbackParamsBridgeParams, nativeCreateInstanceBridgeParams, <span class="keyword">true</span>);</div>
<div class="line"><a id="l01615" name="l01615"></a><span class="lineno"> 1615</span> </div>
<div class="line"><a id="l01616" name="l01616"></a><span class="lineno"> 1616</span>                solverCommandBuffer.Clear();</div>
<div class="line"><a id="l01617" name="l01617"></a><span class="lineno"> 1617</span>                SmokeAndFireBridge.SubmitInstanceEvent(solverCommandBuffer, CurrentInstanceID,</div>
<div class="line"><a id="l01618" name="l01618"></a><span class="lineno"> 1618</span>                                                       SmokeAndFireBridge.EventID.InitializeGpuReadback,</div>
<div class="line"><a id="l01619" name="l01619"></a><span class="lineno"> 1619</span>                                                       nativeCreateInstanceBridgeParams);</div>
<div class="line"><a id="l01620" name="l01620"></a><span class="lineno"> 1620</span>                Graphics.ExecuteCommandBuffer(solverCommandBuffer);</div>
<div class="line"><a id="l01621" name="l01621"></a><span class="lineno"> 1621</span>                solverCommandBuffer.Clear();</div>
<div class="line"><a id="l01622" name="l01622"></a><span class="lineno"> 1622</span>                toFreeOnExit.Add(nativeCreateInstanceBridgeParams);</div>
<div class="line"><a id="l01623" name="l01623"></a><span class="lineno"> 1623</span> </div>
<div class="line"><a id="l01624" name="l01624"></a><span class="lineno"> 1624</span>                <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01625" name="l01625"></a><span class="lineno"> 1625</span>                <span class="comment">// hack to make editor -&gt; play mode transition work when the simulation is initialized</span></div>
<div class="line"><a id="l01626" name="l01626"></a><span class="lineno"> 1626</span>                forceTextureUpdate = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01627" name="l01627"></a><span class="lineno"> 1627</span> </div>
<div class="line"><a id="l01628" name="l01628"></a><span class="lineno"> 1628</span><span class="preprocessor">#if UNITY_EDITOR</span></div>
<div class="line"><a id="l01629" name="l01629"></a><span class="lineno"> 1629</span>                SmokeAndFireAnalytics.TrackSimulationInitialization(<span class="keyword">this</span>);</div>
<div class="line"><a id="l01630" name="l01630"></a><span class="lineno"> 1630</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01631" name="l01631"></a><span class="lineno"> 1631</span>            }</div>
<div class="line"><a id="l01632" name="l01632"></a><span class="lineno"> 1632</span>            <span class="keywordflow">catch</span> (Exception)</div>
<div class="line"><a id="l01633" name="l01633"></a><span class="lineno"> 1633</span>            {</div>
<div class="line"><a id="l01634" name="l01634"></a><span class="lineno"> 1634</span>                ClearRendering();</div>
<div class="line"><a id="l01635" name="l01635"></a><span class="lineno"> 1635</span>                ClearSolver();</div>
<div class="line"><a id="l01636" name="l01636"></a><span class="lineno"> 1636</span> </div>
<div class="line"><a id="l01637" name="l01637"></a><span class="lineno"> 1637</span>                <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l01638" name="l01638"></a><span class="lineno"> 1638</span> </div>
<div class="line"><a id="l01639" name="l01639"></a><span class="lineno"> 1639</span>                <span class="keywordflow">throw</span>;</div>
<div class="line"><a id="l01640" name="l01640"></a><span class="lineno"> 1640</span>            }</div>
<div class="line"><a id="l01641" name="l01641"></a><span class="lineno"> 1641</span>        }</div>
<div class="line"><a id="l01642" name="l01642"></a><span class="lineno"> 1642</span> </div>
<div class="line"><a id="l01643" name="l01643"></a><span class="lineno"> 1643</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ClearTexture(RenderTexture texture, CommandBuffer commandBuffer)</div>
<div class="line"><a id="l01644" name="l01644"></a><span class="lineno"> 1644</span>        {</div>
<div class="line"><a id="l01645" name="l01645"></a><span class="lineno"> 1645</span>            <span class="keywordflow">switch</span> (texture.dimension)</div>
<div class="line"><a id="l01646" name="l01646"></a><span class="lineno"> 1646</span>            {</div>
<div class="line"><a id="l01647" name="l01647"></a><span class="lineno"> 1647</span>                <span class="keywordflow">case</span> TextureDimension.Tex3D:</div>
<div class="line"><a id="l01648" name="l01648"></a><span class="lineno"> 1648</span>                    {</div>
<div class="line"><a id="l01649" name="l01649"></a><span class="lineno"> 1649</span>                        <span class="keywordflow">switch</span> (texture.graphicsFormat)</div>
<div class="line"><a id="l01650" name="l01650"></a><span class="lineno"> 1650</span>                        {</div>
<div class="line"><a id="l01651" name="l01651"></a><span class="lineno"> 1651</span>                            <span class="keywordflow">case</span> GraphicsFormat.R32_SFloat:</div>
<div class="line"><a id="l01652" name="l01652"></a><span class="lineno"> 1652</span>                            <span class="keywordflow">case</span> GraphicsFormat.R16_SFloat:</div>
<div class="line"><a id="l01653" name="l01653"></a><span class="lineno"> 1653</span>                                {</div>
<div class="line"><a id="l01654" name="l01654"></a><span class="lineno"> 1654</span>                                    commandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute, ClearTexture3DFloatID, <span class="stringliteral">&quot;Texture3DFloat&quot;</span>, texture);</div>
<div class="line"><a id="l01655" name="l01655"></a><span class="lineno"> 1655</span>                                    commandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute, <span class="stringliteral">&quot;Texture3DFloatDimensions&quot;</span>, <span class="keyword">new</span> Vector3(texture.width, texture.height, texture.volumeDepth));</div>
<div class="line"><a id="l01656" name="l01656"></a><span class="lineno"> 1656</span>                                    commandBuffer.DispatchCompute(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute, ClearTexture3DFloatID, IntDivCeil(texture.width, TEXTURE3D_CLEAR_GROUPSIZE),</div>
<div class="line"><a id="l01657" name="l01657"></a><span class="lineno"> 1657</span>                                                              IntDivCeil(texture.height, TEXTURE3D_CLEAR_GROUPSIZE), IntDivCeil(texture.volumeDepth, TEXTURE3D_CLEAR_GROUPSIZE));</div>
<div class="line"><a id="l01658" name="l01658"></a><span class="lineno"> 1658</span>                                }</div>
<div class="line"><a id="l01659" name="l01659"></a><span class="lineno"> 1659</span>                                <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01660" name="l01660"></a><span class="lineno"> 1660</span>                            <span class="keywordflow">case</span> GraphicsFormat.R32G32_SFloat:</div>
<div class="line"><a id="l01661" name="l01661"></a><span class="lineno"> 1661</span>                            <span class="keywordflow">case</span> GraphicsFormat.R16G16_SFloat:</div>
<div class="line"><a id="l01662" name="l01662"></a><span class="lineno"> 1662</span>                                {</div>
<div class="line"><a id="l01663" name="l01663"></a><span class="lineno"> 1663</span>                                    commandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute, ClearTexture3DFloat2ID, <span class="stringliteral">&quot;Texture3DFloat2&quot;</span>, texture);</div>
<div class="line"><a id="l01664" name="l01664"></a><span class="lineno"> 1664</span>                                    commandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute, <span class="stringliteral">&quot;Texture3DFloat2Dimensions&quot;</span>, <span class="keyword">new</span> Vector3(texture.width, texture.height, texture.volumeDepth));</div>
<div class="line"><a id="l01665" name="l01665"></a><span class="lineno"> 1665</span>                                    commandBuffer.DispatchCompute(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute, ClearTexture3DFloat2ID, IntDivCeil(texture.width, TEXTURE3D_CLEAR_GROUPSIZE),</div>
<div class="line"><a id="l01666" name="l01666"></a><span class="lineno"> 1666</span>                                                              IntDivCeil(texture.height, TEXTURE3D_CLEAR_GROUPSIZE), IntDivCeil(texture.volumeDepth, TEXTURE3D_CLEAR_GROUPSIZE));</div>
<div class="line"><a id="l01667" name="l01667"></a><span class="lineno"> 1667</span>                                }</div>
<div class="line"><a id="l01668" name="l01668"></a><span class="lineno"> 1668</span>                                <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01669" name="l01669"></a><span class="lineno"> 1669</span>                            <span class="keywordflow">case</span> GraphicsFormat.R32G32B32_SFloat:</div>
<div class="line"><a id="l01670" name="l01670"></a><span class="lineno"> 1670</span>                            <span class="keywordflow">case</span> GraphicsFormat.R16G16B16_SFloat:</div>
<div class="line"><a id="l01671" name="l01671"></a><span class="lineno"> 1671</span>                            <span class="keywordflow">case</span> GraphicsFormat.B10G11R11_UFloatPack32:</div>
<div class="line"><a id="l01672" name="l01672"></a><span class="lineno"> 1672</span>                                {</div>
<div class="line"><a id="l01673" name="l01673"></a><span class="lineno"> 1673</span>                                    commandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute, ClearTexture3DFloat3ID, <span class="stringliteral">&quot;Texture3DFloat3&quot;</span>, texture);</div>
<div class="line"><a id="l01674" name="l01674"></a><span class="lineno"> 1674</span>                                    commandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute, <span class="stringliteral">&quot;Texture3DFloat3Dimensions&quot;</span>, <span class="keyword">new</span> Vector3(texture.width, texture.height, texture.volumeDepth));</div>
<div class="line"><a id="l01675" name="l01675"></a><span class="lineno"> 1675</span>                                    commandBuffer.DispatchCompute(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute, ClearTexture3DFloat3ID, IntDivCeil(texture.width, TEXTURE3D_CLEAR_GROUPSIZE),</div>
<div class="line"><a id="l01676" name="l01676"></a><span class="lineno"> 1676</span>                                                              IntDivCeil(texture.height, TEXTURE3D_CLEAR_GROUPSIZE), IntDivCeil(texture.volumeDepth, TEXTURE3D_CLEAR_GROUPSIZE));</div>
<div class="line"><a id="l01677" name="l01677"></a><span class="lineno"> 1677</span>                                }</div>
<div class="line"><a id="l01678" name="l01678"></a><span class="lineno"> 1678</span>                                <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01679" name="l01679"></a><span class="lineno"> 1679</span>                            <span class="keywordflow">case</span> GraphicsFormat.R32G32B32A32_SFloat:</div>
<div class="line"><a id="l01680" name="l01680"></a><span class="lineno"> 1680</span>                            <span class="keywordflow">case</span> GraphicsFormat.R16G16B16A16_SFloat:</div>
<div class="line"><a id="l01681" name="l01681"></a><span class="lineno"> 1681</span>                                {</div>
<div class="line"><a id="l01682" name="l01682"></a><span class="lineno"> 1682</span>                                    commandBuffer.SetComputeTextureParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute, ClearTexture3DFloat4ID, <span class="stringliteral">&quot;Texture3DFloat4&quot;</span>, texture);</div>
<div class="line"><a id="l01683" name="l01683"></a><span class="lineno"> 1683</span>                                    commandBuffer.SetComputeVectorParam(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute, <span class="stringliteral">&quot;Texture3DFloat4Dimensions&quot;</span>, <span class="keyword">new</span> Vector3(texture.width, texture.height, texture.volumeDepth));</div>
<div class="line"><a id="l01684" name="l01684"></a><span class="lineno"> 1684</span>                                    commandBuffer.DispatchCompute(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute, ClearTexture3DFloat4ID, IntDivCeil(texture.width, TEXTURE3D_CLEAR_GROUPSIZE),</div>
<div class="line"><a id="l01685" name="l01685"></a><span class="lineno"> 1685</span>                                                              IntDivCeil(texture.height, TEXTURE3D_CLEAR_GROUPSIZE), IntDivCeil(texture.volumeDepth, TEXTURE3D_CLEAR_GROUPSIZE));</div>
<div class="line"><a id="l01686" name="l01686"></a><span class="lineno"> 1686</span>                                }</div>
<div class="line"><a id="l01687" name="l01687"></a><span class="lineno"> 1687</span>                                <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01688" name="l01688"></a><span class="lineno"> 1688</span>                            <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01689" name="l01689"></a><span class="lineno"> 1689</span>                                <span class="keywordflow">throw</span> <span class="keyword">new</span> NotSupportedException($<span class="stringliteral">&quot;Clearing texture of format {texture.graphicsFormat} is not supported&quot;</span>);</div>
<div class="line"><a id="l01690" name="l01690"></a><span class="lineno"> 1690</span>                        }</div>
<div class="line"><a id="l01691" name="l01691"></a><span class="lineno"> 1691</span>                    }</div>
<div class="line"><a id="l01692" name="l01692"></a><span class="lineno"> 1692</span>                    <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01693" name="l01693"></a><span class="lineno"> 1693</span>                <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01694" name="l01694"></a><span class="lineno"> 1694</span>                    <span class="keywordflow">throw</span> <span class="keyword">new</span> NotSupportedException($<span class="stringliteral">&quot;Clearing texture of type {texture.dimension} is not supported&quot;</span>);</div>
<div class="line"><a id="l01695" name="l01695"></a><span class="lineno"> 1695</span>            }</div>
<div class="line"><a id="l01696" name="l01696"></a><span class="lineno"> 1696</span>        }</div>
<div class="line"><a id="l01697" name="l01697"></a><span class="lineno"> 1697</span> </div>
<div class="line"><a id="l01698" name="l01698"></a><span class="lineno"> 1698</span>        <span class="keyword">private</span> RenderTexture InitVolumeTexture(Vector3Int resolution, <span class="keywordtype">string</span> name,</div>
<div class="line"><a id="l01699" name="l01699"></a><span class="lineno"> 1699</span>                                                GraphicsFormat format = GraphicsFormat.R32G32B32A32_SFloat)</div>
<div class="line"><a id="l01700" name="l01700"></a><span class="lineno"> 1700</span>        {</div>
<div class="line"><a id="l01701" name="l01701"></a><span class="lineno"> 1701</span>            format = SystemInfo.IsFormatSupported(format, FormatUsage.LoadStore) ? format</div>
<div class="line"><a id="l01702" name="l01702"></a><span class="lineno"> 1702</span>                                                                                 : GraphicsFormat.R32G32B32A32_SFloat;</div>
<div class="line"><a id="l01703" name="l01703"></a><span class="lineno"> 1703</span> </div>
<div class="line"><a id="l01704" name="l01704"></a><span class="lineno"> 1704</span>            var volume = <span class="keyword">new</span> RenderTexture(resolution.x, resolution.y, 0, format);</div>
<div class="line"><a id="l01705" name="l01705"></a><span class="lineno"> 1705</span>            volume.volumeDepth = resolution.z;</div>
<div class="line"><a id="l01706" name="l01706"></a><span class="lineno"> 1706</span>            volume.dimension = TextureDimension.Tex3D;</div>
<div class="line"><a id="l01707" name="l01707"></a><span class="lineno"> 1707</span>            volume.enableRandomWrite = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01708" name="l01708"></a><span class="lineno"> 1708</span>            volume.filterMode = FilterMode.Trilinear;</div>
<div class="line"><a id="l01709" name="l01709"></a><span class="lineno"> 1709</span>            volume.name = name;</div>
<div class="line"><a id="l01710" name="l01710"></a><span class="lineno"> 1710</span>            volume.Create();</div>
<div class="line"><a id="l01711" name="l01711"></a><span class="lineno"> 1711</span>            <span class="keywordflow">if</span> (!volume.IsCreated())</div>
<div class="line"><a id="l01712" name="l01712"></a><span class="lineno"> 1712</span>            {</div>
<div class="line"><a id="l01713" name="l01713"></a><span class="lineno"> 1713</span>                <span class="keywordflow">throw</span> <span class="keyword">new</span> NotSupportedException(<span class="stringliteral">&quot;Failed to create 3D texture.&quot;</span>);</div>
<div class="line"><a id="l01714" name="l01714"></a><span class="lineno"> 1714</span>            }</div>
<div class="line"><a id="l01715" name="l01715"></a><span class="lineno"> 1715</span> </div>
<div class="line"><a id="l01716" name="l01716"></a><span class="lineno"> 1716</span>            <span class="keywordflow">return</span> volume;</div>
<div class="line"><a id="l01717" name="l01717"></a><span class="lineno"> 1717</span>        }</div>
<div class="line"><a id="l01718" name="l01718"></a><span class="lineno"> 1718</span> </div>
<div class="line"><a id="l01719" name="l01719"></a><span class="lineno"> 1719</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> FindComputeKernels()</div>
<div class="line"><a id="l01720" name="l01720"></a><span class="lineno"> 1720</span>        {</div>
<div class="line"><a id="l01721" name="l01721"></a><span class="lineno"> 1721</span>            ShadowmapID = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute.FindKernel(<span class="stringliteral">&quot;CS_Shadowmap&quot;</span>);</div>
<div class="line"><a id="l01722" name="l01722"></a><span class="lineno"> 1722</span>            LightmapID = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute.FindKernel(<span class="stringliteral">&quot;CS_Lightmap&quot;</span>);</div>
<div class="line"><a id="l01723" name="l01723"></a><span class="lineno"> 1723</span>            IlluminationID = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute.FindKernel(<span class="stringliteral">&quot;CS_Illumination&quot;</span>);</div>
<div class="line"><a id="l01724" name="l01724"></a><span class="lineno"> 1724</span>            CopyDepthID = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.RendererCompute.FindKernel(<span class="stringliteral">&quot;CS_CopyDepth&quot;</span>);</div>
<div class="line"><a id="l01725" name="l01725"></a><span class="lineno"> 1725</span>            ClearTexture3DFloatID = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute.FindKernel(<span class="stringliteral">&quot;CS_ClearTexture3DFloat&quot;</span>);</div>
<div class="line"><a id="l01726" name="l01726"></a><span class="lineno"> 1726</span>            ClearTexture3DFloat2ID = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute.FindKernel(<span class="stringliteral">&quot;CS_ClearTexture3DFloat2&quot;</span>);</div>
<div class="line"><a id="l01727" name="l01727"></a><span class="lineno"> 1727</span>            ClearTexture3DFloat3ID = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute.FindKernel(<span class="stringliteral">&quot;CS_ClearTexture3DFloat3&quot;</span>);</div>
<div class="line"><a id="l01728" name="l01728"></a><span class="lineno"> 1728</span>            ClearTexture3DFloat4ID = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.ClearResourceCompute.FindKernel(<span class="stringliteral">&quot;CS_ClearTexture3DFloat4&quot;</span>);</div>
<div class="line"><a id="l01729" name="l01729"></a><span class="lineno"> 1729</span>        }</div>
<div class="line"><a id="l01730" name="l01730"></a><span class="lineno"> 1730</span> </div>
<div class="line"><a id="l01731" name="l01731"></a><span class="lineno"> 1731</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> Clear3DTextures()</div>
<div class="line"><a id="l01732" name="l01732"></a><span class="lineno"> 1732</span>        {</div>
<div class="line"><a id="l01733" name="l01733"></a><span class="lineno"> 1733</span>            solverCommandBuffer.Clear();</div>
<div class="line"><a id="l01734" name="l01734"></a><span class="lineno"> 1734</span>            ClearTexture(RenderDensity, solverCommandBuffer);</div>
<div class="line"><a id="l01735" name="l01735"></a><span class="lineno"> 1735</span>            <span class="keywordflow">if</span> (GridDownscale &gt; 1)</div>
<div class="line"><a id="l01736" name="l01736"></a><span class="lineno"> 1736</span>            {</div>
<div class="line"><a id="l01737" name="l01737"></a><span class="lineno"> 1737</span>                ClearTexture(RenderDensityLOD, solverCommandBuffer);</div>
<div class="line"><a id="l01738" name="l01738"></a><span class="lineno"> 1738</span>            }</div>
<div class="line"><a id="l01739" name="l01739"></a><span class="lineno"> 1739</span>            ClearTexture(RenderColor, solverCommandBuffer);</div>
<div class="line"><a id="l01740" name="l01740"></a><span class="lineno"> 1740</span>            ClearTexture(RenderIllumination, solverCommandBuffer);</div>
<div class="line"><a id="l01741" name="l01741"></a><span class="lineno"> 1741</span>            ClearTexture(ColorTexture0, solverCommandBuffer);</div>
<div class="line"><a id="l01742" name="l01742"></a><span class="lineno"> 1742</span>            ClearTexture(VelocityTexture0, solverCommandBuffer);</div>
<div class="line"><a id="l01743" name="l01743"></a><span class="lineno"> 1743</span>            ClearTexture(ColorTexture1, solverCommandBuffer);</div>
<div class="line"><a id="l01744" name="l01744"></a><span class="lineno"> 1744</span>            ClearTexture(VelocityTexture1, solverCommandBuffer);</div>
<div class="line"><a id="l01745" name="l01745"></a><span class="lineno"> 1745</span>            ClearTexture(TmpSDFTexture, solverCommandBuffer);</div>
<div class="line"><a id="l01746" name="l01746"></a><span class="lineno"> 1746</span>            ClearTexture(Divergence, solverCommandBuffer);</div>
<div class="line"><a id="l01747" name="l01747"></a><span class="lineno"> 1747</span>            ClearTexture(ResidualLOD0, solverCommandBuffer);</div>
<div class="line"><a id="l01748" name="l01748"></a><span class="lineno"> 1748</span>            ClearTexture(ResidualLOD1, solverCommandBuffer);</div>
<div class="line"><a id="l01749" name="l01749"></a><span class="lineno"> 1749</span>            ClearTexture(ResidualLOD2, solverCommandBuffer);</div>
<div class="line"><a id="l01750" name="l01750"></a><span class="lineno"> 1750</span>            ClearTexture(Pressure0LOD0, solverCommandBuffer);</div>
<div class="line"><a id="l01751" name="l01751"></a><span class="lineno"> 1751</span>            ClearTexture(Pressure0LOD1, solverCommandBuffer);</div>
<div class="line"><a id="l01752" name="l01752"></a><span class="lineno"> 1752</span>            ClearTexture(Pressure0LOD2, solverCommandBuffer);</div>
<div class="line"><a id="l01753" name="l01753"></a><span class="lineno"> 1753</span>            ClearTexture(Pressure1LOD0, solverCommandBuffer);</div>
<div class="line"><a id="l01754" name="l01754"></a><span class="lineno"> 1754</span>            ClearTexture(Pressure1LOD1, solverCommandBuffer);</div>
<div class="line"><a id="l01755" name="l01755"></a><span class="lineno"> 1755</span>            ClearTexture(Pressure1LOD2, solverCommandBuffer);</div>
<div class="line"><a id="l01756" name="l01756"></a><span class="lineno"> 1756</span>            Graphics.ExecuteCommandBuffer(solverCommandBuffer);</div>
<div class="line"><a id="l01757" name="l01757"></a><span class="lineno"> 1757</span>            solverCommandBuffer.Clear();</div>
<div class="line"><a id="l01758" name="l01758"></a><span class="lineno"> 1758</span>        }</div>
<div class="line"><a id="l01759" name="l01759"></a><span class="lineno"> 1759</span> </div>
<div class="line"><a id="l01760" name="l01760"></a><span class="lineno"> 1760</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> Initialize3DTextures()</div>
<div class="line"><a id="l01761" name="l01761"></a><span class="lineno"> 1761</span>        {</div>
<div class="line"><a id="l01762" name="l01762"></a><span class="lineno"> 1762</span>            RenderDensity = InitVolumeTexture(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, nameof(RenderDensity), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01763" name="l01763"></a><span class="lineno"> 1763</span> </div>
<div class="line"><a id="l01764" name="l01764"></a><span class="lineno"> 1764</span>            <span class="keywordflow">if</span> (GridDownscale &gt; 1)</div>
<div class="line"><a id="l01765" name="l01765"></a><span class="lineno"> 1765</span>            {</div>
<div class="line"><a id="l01766" name="l01766"></a><span class="lineno"> 1766</span>                DownscaleXYZ = <span class="keyword">new</span> Vector3Int(IntDivCeil((<span class="keywordtype">int</span>)GridSizeLOD.x, WORKGROUP_SIZE_X),</div>
<div class="line"><a id="l01767" name="l01767"></a><span class="lineno"> 1767</span>                                              IntDivCeil((<span class="keywordtype">int</span>)GridSizeLOD.y, WORKGROUP_SIZE_Y),</div>
<div class="line"><a id="l01768" name="l01768"></a><span class="lineno"> 1768</span>                                              IntDivCeil((<span class="keywordtype">int</span>)GridSizeLOD.z, WORKGROUP_SIZE_Z));</div>
<div class="line"><a id="l01769" name="l01769"></a><span class="lineno"> 1769</span>                RenderDensityLOD = InitVolumeTexture(GridSizeLOD, nameof(RenderDensityLOD), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01770" name="l01770"></a><span class="lineno"> 1770</span>            }</div>
<div class="line"><a id="l01771" name="l01771"></a><span class="lineno"> 1771</span> </div>
<div class="line"><a id="l01772" name="l01772"></a><span class="lineno"> 1772</span>            RenderColor = InitVolumeTexture(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, nameof(RenderColor), GraphicsFormat.R16G16_SFloat);</div>
<div class="line"><a id="l01773" name="l01773"></a><span class="lineno"> 1773</span>            RenderIllumination =</div>
<div class="line"><a id="l01774" name="l01774"></a><span class="lineno"> 1774</span>                InitVolumeTexture(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, nameof(RenderIllumination), GraphicsFormat.B10G11R11_UFloatPack32);</div>
<div class="line"><a id="l01775" name="l01775"></a><span class="lineno"> 1775</span>            ColorTexture0 = InitVolumeTexture(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, nameof(ColorTexture0), GraphicsFormat.R16G16B16_SFloat);</div>
<div class="line"><a id="l01776" name="l01776"></a><span class="lineno"> 1776</span>            VelocityTexture0 =</div>
<div class="line"><a id="l01777" name="l01777"></a><span class="lineno"> 1777</span>                InitVolumeTexture(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, nameof(VelocityTexture0), GraphicsFormat.R16G16B16A16_SFloat);</div>
<div class="line"><a id="l01778" name="l01778"></a><span class="lineno"> 1778</span>            ColorTexture1 = InitVolumeTexture(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, nameof(ColorTexture1), GraphicsFormat.R16G16_SFloat);</div>
<div class="line"><a id="l01779" name="l01779"></a><span class="lineno"> 1779</span>            VelocityTexture1 =</div>
<div class="line"><a id="l01780" name="l01780"></a><span class="lineno"> 1780</span>                InitVolumeTexture(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, nameof(VelocityTexture1), GraphicsFormat.R16G16B16A16_SFloat);</div>
<div class="line"><a id="l01781" name="l01781"></a><span class="lineno"> 1781</span>            TmpSDFTexture = InitVolumeTexture(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, nameof(TmpSDFTexture), GraphicsFormat.R16G16_SFloat);</div>
<div class="line"><a id="l01782" name="l01782"></a><span class="lineno"> 1782</span> </div>
<div class="line"><a id="l01783" name="l01783"></a><span class="lineno"> 1783</span>            Divergence =</div>
<div class="line"><a id="l01784" name="l01784"></a><span class="lineno"> 1784</span>                InitVolumeTexture(PressureGridSize(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, 1), nameof(Divergence), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01785" name="l01785"></a><span class="lineno"> 1785</span>            ResidualLOD0 =</div>
<div class="line"><a id="l01786" name="l01786"></a><span class="lineno"> 1786</span>                InitVolumeTexture(PressureGridSize(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, 1), nameof(ResidualLOD0), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01787" name="l01787"></a><span class="lineno"> 1787</span>            ResidualLOD1 =</div>
<div class="line"><a id="l01788" name="l01788"></a><span class="lineno"> 1788</span>                InitVolumeTexture(PressureGridSize(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, 2), nameof(ResidualLOD1), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01789" name="l01789"></a><span class="lineno"> 1789</span>            ResidualLOD2 =</div>
<div class="line"><a id="l01790" name="l01790"></a><span class="lineno"> 1790</span>                InitVolumeTexture(PressureGridSize(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, 4), nameof(ResidualLOD2), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01791" name="l01791"></a><span class="lineno"> 1791</span>            Pressure0LOD0 =</div>
<div class="line"><a id="l01792" name="l01792"></a><span class="lineno"> 1792</span>                InitVolumeTexture(PressureGridSize(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, 1), nameof(Pressure0LOD0), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01793" name="l01793"></a><span class="lineno"> 1793</span>            Pressure0LOD1 =</div>
<div class="line"><a id="l01794" name="l01794"></a><span class="lineno"> 1794</span>                InitVolumeTexture(PressureGridSize(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, 2), nameof(Pressure0LOD1), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01795" name="l01795"></a><span class="lineno"> 1795</span>            Pressure0LOD2 =</div>
<div class="line"><a id="l01796" name="l01796"></a><span class="lineno"> 1796</span>                InitVolumeTexture(PressureGridSize(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, 4), nameof(Pressure0LOD2), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01797" name="l01797"></a><span class="lineno"> 1797</span>            Pressure1LOD0 =</div>
<div class="line"><a id="l01798" name="l01798"></a><span class="lineno"> 1798</span>                InitVolumeTexture(PressureGridSize(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, 1), nameof(Pressure1LOD0), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01799" name="l01799"></a><span class="lineno"> 1799</span>            Pressure1LOD1 =</div>
<div class="line"><a id="l01800" name="l01800"></a><span class="lineno"> 1800</span>                InitVolumeTexture(PressureGridSize(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, 2), nameof(Pressure1LOD1), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01801" name="l01801"></a><span class="lineno"> 1801</span>            Pressure1LOD2 =</div>
<div class="line"><a id="l01802" name="l01802"></a><span class="lineno"> 1802</span>                InitVolumeTexture(PressureGridSize(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>, 4), nameof(Pressure1LOD2), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01803" name="l01803"></a><span class="lineno"> 1803</span>        }</div>
<div class="line"><a id="l01804" name="l01804"></a><span class="lineno"> 1804</span> </div>
<div class="line"><a id="l01805" name="l01805"></a><span class="lineno"> 1805</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> CalculateWorkgroupSizes()</div>
<div class="line"><a id="l01806" name="l01806"></a><span class="lineno"> 1806</span>        {</div>
<div class="line"><a id="l01807" name="l01807"></a><span class="lineno"> 1807</span>            Vector3 ShadowGridSizeFloat = <span class="keyword">new</span> Vector3(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>.x, <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>.y, <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>.z) * <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a509147db4aef684fc27ee758480b480f">ShadowResolution</a>;</div>
<div class="line"><a id="l01808" name="l01808"></a><span class="lineno"> 1808</span>            ShadowGridSize =</div>
<div class="line"><a id="l01809" name="l01809"></a><span class="lineno"> 1809</span>                <span class="keyword">new</span> Vector3Int((<span class="keywordtype">int</span>)ShadowGridSizeFloat.x, (<span class="keywordtype">int</span>)ShadowGridSizeFloat.y, (<span class="keywordtype">int</span>)ShadowGridSizeFloat.z);</div>
<div class="line"><a id="l01810" name="l01810"></a><span class="lineno"> 1810</span>            Shadowmap =</div>
<div class="line"><a id="l01811" name="l01811"></a><span class="lineno"> 1811</span>                InitVolumeTexture(ShadowGridSize, nameof(Shadowmap), GraphicsFormat.R16_SFloat);</div>
<div class="line"><a id="l01812" name="l01812"></a><span class="lineno"> 1812</span>            ShadowWorkGroupsXYZ = <span class="keyword">new</span> Vector3Int(IntDivCeil(ShadowGridSize.x, WORKGROUP_SIZE_X),</div>
<div class="line"><a id="l01813" name="l01813"></a><span class="lineno"> 1813</span>                                                 IntDivCeil(ShadowGridSize.y, WORKGROUP_SIZE_Y),</div>
<div class="line"><a id="l01814" name="l01814"></a><span class="lineno"> 1814</span>                                                 IntDivCeil(ShadowGridSize.z, WORKGROUP_SIZE_Z));</div>
<div class="line"><a id="l01815" name="l01815"></a><span class="lineno"> 1815</span> </div>
<div class="line"><a id="l01816" name="l01816"></a><span class="lineno"> 1816</span>            Vector3 LightGridSizeFloat = <span class="keyword">new</span> Vector3(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>.x, <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>.y, <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>.z) * <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a027137114f1de5ad423f1d5a5d23e462">IlluminationResolution</a>;</div>
<div class="line"><a id="l01817" name="l01817"></a><span class="lineno"> 1817</span>            LightGridSize =</div>
<div class="line"><a id="l01818" name="l01818"></a><span class="lineno"> 1818</span>                <span class="keyword">new</span> Vector3Int((<span class="keywordtype">int</span>)LightGridSizeFloat.x, (<span class="keywordtype">int</span>)LightGridSizeFloat.y, (<span class="keywordtype">int</span>)LightGridSizeFloat.z);</div>
<div class="line"><a id="l01819" name="l01819"></a><span class="lineno"> 1819</span>            Lightmap =</div>
<div class="line"><a id="l01820" name="l01820"></a><span class="lineno"> 1820</span>                InitVolumeTexture(LightGridSize, nameof(Lightmap), GraphicsFormat.R16G16B16A16_SFloat);</div>
<div class="line"><a id="l01821" name="l01821"></a><span class="lineno"> 1821</span>            LightWorkGroupsXYZ = <span class="keyword">new</span> Vector3Int(IntDivCeil(LightGridSize.x, WORKGROUP_SIZE_X),</div>
<div class="line"><a id="l01822" name="l01822"></a><span class="lineno"> 1822</span>                                                IntDivCeil(LightGridSize.y, WORKGROUP_SIZE_Y),</div>
<div class="line"><a id="l01823" name="l01823"></a><span class="lineno"> 1823</span>                                                IntDivCeil(LightGridSize.z, WORKGROUP_SIZE_Z));</div>
<div class="line"><a id="l01824" name="l01824"></a><span class="lineno"> 1824</span> </div>
<div class="line"><a id="l01825" name="l01825"></a><span class="lineno"> 1825</span>            WorkGroupsXYZ = <span class="keyword">new</span> Vector3Int(IntDivCeil(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>.x, WORKGROUP_SIZE_X),</div>
<div class="line"><a id="l01826" name="l01826"></a><span class="lineno"> 1826</span>                                           IntDivCeil(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>.y, WORKGROUP_SIZE_Y),</div>
<div class="line"><a id="l01827" name="l01827"></a><span class="lineno"> 1827</span>                                           IntDivCeil(<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>.z, WORKGROUP_SIZE_Z));</div>
<div class="line"><a id="l01828" name="l01828"></a><span class="lineno"> 1828</span>            MaxEffectParticleWorkgroups = IntDivCeil(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a646450d6b4d0d5944bc1a5f7eb25eea6">MaxEffectParticles</a>, PARTICLE_WORKGROUP);</div>
<div class="line"><a id="l01829" name="l01829"></a><span class="lineno"> 1829</span>        }</div>
<div class="line"><a id="l01830" name="l01830"></a><span class="lineno"> 1830</span> </div>
<div class="line"><a id="l01831" name="l01831"></a><span class="lineno"> 1831</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> RegisterResources()</div>
<div class="line"><a id="l01832" name="l01832"></a><span class="lineno"> 1832</span>        {</div>
<div class="line"><a id="l01833" name="l01833"></a><span class="lineno"> 1833</span>            var registerBuffersParams = <span class="keyword">new</span> RegisterBuffersBridgeParams();</div>
<div class="line"><a id="l01834" name="l01834"></a><span class="lineno"> 1834</span>            registerBuffersParams.SimulationParams = NativeSimulationData;</div>
<div class="line"><a id="l01835" name="l01835"></a><span class="lineno"> 1835</span> </div>
<div class="line"><a id="l01836" name="l01836"></a><span class="lineno"> 1836</span>            registerBuffersParams.RenderDensity = MakeTextureNativeBridge(RenderDensity);</div>
<div class="line"><a id="l01837" name="l01837"></a><span class="lineno"> 1837</span>            registerBuffersParams.RenderDensityLOD = MakeTextureNativeBridge(RenderDensityLOD);</div>
<div class="line"><a id="l01838" name="l01838"></a><span class="lineno"> 1838</span>            registerBuffersParams.RenderColor = MakeTextureNativeBridge(RenderColor);</div>
<div class="line"><a id="l01839" name="l01839"></a><span class="lineno"> 1839</span>            registerBuffersParams.RenderIllumination = MakeTextureNativeBridge(RenderIllumination);</div>
<div class="line"><a id="l01840" name="l01840"></a><span class="lineno"> 1840</span>            registerBuffersParams.ColorTexture0 = MakeTextureNativeBridge(ColorTexture0);</div>
<div class="line"><a id="l01841" name="l01841"></a><span class="lineno"> 1841</span>            registerBuffersParams.VelocityTexture0 = MakeTextureNativeBridge(VelocityTexture0);</div>
<div class="line"><a id="l01842" name="l01842"></a><span class="lineno"> 1842</span>            registerBuffersParams.ColorTexture1 = MakeTextureNativeBridge(ColorTexture1);</div>
<div class="line"><a id="l01843" name="l01843"></a><span class="lineno"> 1843</span>            registerBuffersParams.VelocityTexture1 = MakeTextureNativeBridge(VelocityTexture1);</div>
<div class="line"><a id="l01844" name="l01844"></a><span class="lineno"> 1844</span>            registerBuffersParams.TmpSDFTexture = MakeTextureNativeBridge(TmpSDFTexture);</div>
<div class="line"><a id="l01845" name="l01845"></a><span class="lineno"> 1845</span>            registerBuffersParams.EmitterTexture = MakeTextureNativeBridge(ManipulatorManager.EmitterTexture);</div>
<div class="line"><a id="l01846" name="l01846"></a><span class="lineno"> 1846</span> </div>
<div class="line"><a id="l01847" name="l01847"></a><span class="lineno"> 1847</span>            registerBuffersParams.Divergence = MakeTextureNativeBridge(Divergence);</div>
<div class="line"><a id="l01848" name="l01848"></a><span class="lineno"> 1848</span>            registerBuffersParams.ResidualLOD0 = MakeTextureNativeBridge(ResidualLOD0);</div>
<div class="line"><a id="l01849" name="l01849"></a><span class="lineno"> 1849</span>            registerBuffersParams.ResidualLOD1 = MakeTextureNativeBridge(ResidualLOD1);</div>
<div class="line"><a id="l01850" name="l01850"></a><span class="lineno"> 1850</span>            registerBuffersParams.ResidualLOD2 = MakeTextureNativeBridge(ResidualLOD2);</div>
<div class="line"><a id="l01851" name="l01851"></a><span class="lineno"> 1851</span>            registerBuffersParams.Pressure0LOD0 = MakeTextureNativeBridge(Pressure0LOD0);</div>
<div class="line"><a id="l01852" name="l01852"></a><span class="lineno"> 1852</span>            registerBuffersParams.Pressure0LOD1 = MakeTextureNativeBridge(Pressure0LOD1);</div>
<div class="line"><a id="l01853" name="l01853"></a><span class="lineno"> 1853</span>            registerBuffersParams.Pressure0LOD2 = MakeTextureNativeBridge(Pressure0LOD2);</div>
<div class="line"><a id="l01854" name="l01854"></a><span class="lineno"> 1854</span>            registerBuffersParams.Pressure1LOD0 = MakeTextureNativeBridge(Pressure1LOD0);</div>
<div class="line"><a id="l01855" name="l01855"></a><span class="lineno"> 1855</span>            registerBuffersParams.Pressure1LOD1 = MakeTextureNativeBridge(Pressure1LOD1);</div>
<div class="line"><a id="l01856" name="l01856"></a><span class="lineno"> 1856</span>            registerBuffersParams.Pressure1LOD2 = MakeTextureNativeBridge(Pressure1LOD2);</div>
<div class="line"><a id="l01857" name="l01857"></a><span class="lineno"> 1857</span>            registerBuffersParams.AtomicCounters = GetNativePtr(AtomicCounters);</div>
<div class="line"><a id="l01858" name="l01858"></a><span class="lineno"> 1858</span>            registerBuffersParams.EffectParticleData0 = GetNativePtr(EffectParticleData0);</div>
<div class="line"><a id="l01859" name="l01859"></a><span class="lineno"> 1859</span>            registerBuffersParams.EffectParticleData1 = GetNativePtr(EffectParticleData1);</div>
<div class="line"><a id="l01860" name="l01860"></a><span class="lineno"> 1860</span> </div>
<div class="line"><a id="l01861" name="l01861"></a><span class="lineno"> 1861</span>            RandomTexture =</div>
<div class="line"><a id="l01862" name="l01862"></a><span class="lineno"> 1862</span>                <span class="keyword">new</span> Texture3D(RANDOM_TEX_SIZE, RANDOM_TEX_SIZE, RANDOM_TEX_SIZE, TextureFormat.RGBA32, <span class="keyword">false</span>);</div>
<div class="line"><a id="l01863" name="l01863"></a><span class="lineno"> 1863</span>            RandomTexture.filterMode = FilterMode.Trilinear;</div>
<div class="line"><a id="l01864" name="l01864"></a><span class="lineno"> 1864</span>            registerBuffersParams.RandomTexture = MakeTextureNativeBridge(RandomTexture);</div>
<div class="line"><a id="l01865" name="l01865"></a><span class="lineno"> 1865</span> </div>
<div class="line"><a id="l01866" name="l01866"></a><span class="lineno"> 1866</span>            GCHandle randomDataHandle = <span class="keywordflow">default</span>(GCHandle);</div>
<div class="line"><a id="l01867" name="l01867"></a><span class="lineno"> 1867</span>            System.Random rand = <span class="keyword">new</span> System.Random();</div>
<div class="line"><a id="l01868" name="l01868"></a><span class="lineno"> 1868</span>            <span class="keywordtype">int</span> RandomTextureSize = RANDOM_TEX_SIZE * RANDOM_TEX_SIZE * RANDOM_TEX_SIZE;</div>
<div class="line"><a id="l01869" name="l01869"></a><span class="lineno"> 1869</span>            Color32[] RandomTextureData = <span class="keyword">new</span> Color32[RandomTextureSize];</div>
<div class="line"><a id="l01870" name="l01870"></a><span class="lineno"> 1870</span>            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; RandomTextureSize; i++)</div>
<div class="line"><a id="l01871" name="l01871"></a><span class="lineno"> 1871</span>            {</div>
<div class="line"><a id="l01872" name="l01872"></a><span class="lineno"> 1872</span>                RandomTextureData[i] =</div>
<div class="line"><a id="l01873" name="l01873"></a><span class="lineno"> 1873</span>                    <span class="keyword">new</span> Color32((<span class="keywordtype">byte</span>)rand.Next(255), (<span class="keywordtype">byte</span>)rand.Next(255), (<span class="keywordtype">byte</span>)rand.Next(255), (<span class="keywordtype">byte</span>)rand.Next(255));</div>
<div class="line"><a id="l01874" name="l01874"></a><span class="lineno"> 1874</span>            }</div>
<div class="line"><a id="l01875" name="l01875"></a><span class="lineno"> 1875</span> </div>
<div class="line"><a id="l01876" name="l01876"></a><span class="lineno"> 1876</span>            randomDataHandle = GCHandle.Alloc(RandomTextureData, GCHandleType.Pinned);</div>
<div class="line"><a id="l01877" name="l01877"></a><span class="lineno"> 1877</span>            registerBuffersParams.RandomData.dataSize = Marshal.SizeOf(<span class="keyword">new</span> Color32()) * RandomTextureData.Length;</div>
<div class="line"><a id="l01878" name="l01878"></a><span class="lineno"> 1878</span>            registerBuffersParams.RandomData.data = randomDataHandle.AddrOfPinnedObject();</div>
<div class="line"><a id="l01879" name="l01879"></a><span class="lineno"> 1879</span>            registerBuffersParams.RandomData.rowPitch = Marshal.SizeOf(<span class="keyword">new</span> Color32()) * RANDOM_TEX_SIZE;</div>
<div class="line"><a id="l01880" name="l01880"></a><span class="lineno"> 1880</span>            registerBuffersParams.RandomData.dimensionX = RANDOM_TEX_SIZE;</div>
<div class="line"><a id="l01881" name="l01881"></a><span class="lineno"> 1881</span>            registerBuffersParams.RandomData.dimensionY = RANDOM_TEX_SIZE;</div>
<div class="line"><a id="l01882" name="l01882"></a><span class="lineno"> 1882</span>            registerBuffersParams.RandomData.dimensionZ = RANDOM_TEX_SIZE;</div>
<div class="line"><a id="l01883" name="l01883"></a><span class="lineno"> 1883</span> </div>
<div class="line"><a id="l01884" name="l01884"></a><span class="lineno"> 1884</span>            IntPtr nativeRegisterBuffersParams = Marshal.AllocHGlobal(Marshal.SizeOf(registerBuffersParams));</div>
<div class="line"><a id="l01885" name="l01885"></a><span class="lineno"> 1885</span> </div>
<div class="line"><a id="l01886" name="l01886"></a><span class="lineno"> 1886</span>            solverCommandBuffer.Clear();</div>
<div class="line"><a id="l01887" name="l01887"></a><span class="lineno"> 1887</span>            Marshal.StructureToPtr(registerBuffersParams, nativeRegisterBuffersParams, <span class="keyword">true</span>);</div>
<div class="line"><a id="l01888" name="l01888"></a><span class="lineno"> 1888</span>            SmokeAndFireBridge.SubmitInstanceEvent(solverCommandBuffer, CurrentInstanceID,</div>
<div class="line"><a id="l01889" name="l01889"></a><span class="lineno"> 1889</span>                                                   SmokeAndFireBridge.EventID.RegisterSolverBuffers,</div>
<div class="line"><a id="l01890" name="l01890"></a><span class="lineno"> 1890</span>                                                   nativeRegisterBuffersParams);</div>
<div class="line"><a id="l01891" name="l01891"></a><span class="lineno"> 1891</span>            Graphics.ExecuteCommandBuffer(solverCommandBuffer);</div>
<div class="line"><a id="l01892" name="l01892"></a><span class="lineno"> 1892</span>            solverCommandBuffer.Clear();</div>
<div class="line"><a id="l01893" name="l01893"></a><span class="lineno"> 1893</span>            toFreeOnExit.Add(nativeRegisterBuffersParams);</div>
<div class="line"><a id="l01894" name="l01894"></a><span class="lineno"> 1894</span>        }</div>
<div class="line"><a id="l01895" name="l01895"></a><span class="lineno"> 1895</span> </div>
<div class="line"><a id="l01896" name="l01896"></a><span class="lineno"> 1896</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> InitializeManipulators()</div>
<div class="line"><a id="l01897" name="l01897"></a><span class="lineno"> 1897</span>        {</div>
<div class="line"><a id="l01898" name="l01898"></a><span class="lineno"> 1898</span>            <span class="keywordflow">if</span> (ManipulatorManager == <span class="keyword">null</span>)</div>
<div class="line"><a id="l01899" name="l01899"></a><span class="lineno"> 1899</span>            {</div>
<div class="line"><a id="l01900" name="l01900"></a><span class="lineno"> 1900</span>                <span class="keywordflow">throw</span> <span class="keyword">new</span> Exception(<span class="stringliteral">&quot;No manipulator ManipulatorManager has been set&quot;</span>);</div>
<div class="line"><a id="l01901" name="l01901"></a><span class="lineno"> 1901</span>            }</div>
<div class="line"><a id="l01902" name="l01902"></a><span class="lineno"> 1902</span> </div>
<div class="line"><a id="l01903" name="l01903"></a><span class="lineno"> 1903</span>            ManipulatorManager.UpdateConst(Manipulators);</div>
<div class="line"><a id="l01904" name="l01904"></a><span class="lineno"> 1904</span>            ManipulatorManager.UpdateDynamic(<span class="keyword">this</span>);</div>
<div class="line"><a id="l01905" name="l01905"></a><span class="lineno"> 1905</span> </div>
<div class="line"><a id="l01906" name="l01906"></a><span class="lineno"> 1906</span>            <span class="keywordflow">if</span> (ManipulatorManager.TextureCount &gt; 0)</div>
<div class="line"><a id="l01907" name="l01907"></a><span class="lineno"> 1907</span>            {</div>
<div class="line"><a id="l01908" name="l01908"></a><span class="lineno"> 1908</span>                EmbeddingsTexture = <span class="keyword">new</span> Texture3D(</div>
<div class="line"><a id="l01909" name="l01909"></a><span class="lineno"> 1909</span>                    ManipulatorManager.EmbeddingTextureDimension, ManipulatorManager.EmbeddingTextureDimension,</div>
<div class="line"><a id="l01910" name="l01910"></a><span class="lineno"> 1910</span>                    ManipulatorManager.EmbeddingTextureDimension, TextureFormat.RGBA32, <span class="keyword">false</span>);</div>
<div class="line"><a id="l01911" name="l01911"></a><span class="lineno"> 1911</span> </div>
<div class="line"><a id="l01912" name="l01912"></a><span class="lineno"> 1912</span>                SDFGridTexture =</div>
<div class="line"><a id="l01913" name="l01913"></a><span class="lineno"> 1913</span>                    <span class="keyword">new</span> Texture3D(ManipulatorManager.SDFTextureDimension, ManipulatorManager.SDFTextureDimension,</div>
<div class="line"><a id="l01914" name="l01914"></a><span class="lineno"> 1914</span>                                    ManipulatorManager.SDFTextureDimension, TextureFormat.RHalf, <span class="keyword">false</span>);</div>
<div class="line"><a id="l01915" name="l01915"></a><span class="lineno"> 1915</span> </div>
<div class="line"><a id="l01916" name="l01916"></a><span class="lineno"> 1916</span>                EmbeddingsTexture.filterMode = FilterMode.Trilinear;</div>
<div class="line"><a id="l01917" name="l01917"></a><span class="lineno"> 1917</span>                SDFGridTexture.filterMode = FilterMode.Trilinear;</div>
<div class="line"><a id="l01918" name="l01918"></a><span class="lineno"> 1918</span>            }</div>
<div class="line"><a id="l01919" name="l01919"></a><span class="lineno"> 1919</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l01920" name="l01920"></a><span class="lineno"> 1920</span>            {</div>
<div class="line"><a id="l01921" name="l01921"></a><span class="lineno"> 1921</span>                EmbeddingsTexture = <span class="keyword">new</span> Texture3D(1, 1, 1, TextureFormat.RGBA32, 0);</div>
<div class="line"><a id="l01922" name="l01922"></a><span class="lineno"> 1922</span>                SDFGridTexture = <span class="keyword">new</span> Texture3D(1, 1, 1, TextureFormat.RHalf, 0);</div>
<div class="line"><a id="l01923" name="l01923"></a><span class="lineno"> 1923</span>            }</div>
<div class="line"><a id="l01924" name="l01924"></a><span class="lineno"> 1924</span> </div>
<div class="line"><a id="l01925" name="l01925"></a><span class="lineno"> 1925</span>            <span class="keywordtype">int</span> ManipSize = Marshal.SizeOf(typeof(ZibraManipulatorManager.ManipulatorParam));</div>
<div class="line"><a id="l01926" name="l01926"></a><span class="lineno"> 1926</span>            <span class="keywordtype">int</span> SDFSize = Marshal.SizeOf(typeof(ZibraManipulatorManager.SDFObjectParams));</div>
<div class="line"><a id="l01927" name="l01927"></a><span class="lineno"> 1927</span>            <span class="comment">// Need to create at least some buffer to bind to shaders</span></div>
<div class="line"><a id="l01928" name="l01928"></a><span class="lineno"> 1928</span>            NativeManipData = Marshal.AllocHGlobal(ManipulatorManager.Elements * ManipSize);</div>
<div class="line"><a id="l01929" name="l01929"></a><span class="lineno"> 1929</span>            NativeSDFData = Marshal.AllocHGlobal(ManipulatorManager.SDFObjectList.Count * SDFSize);</div>
<div class="line"><a id="l01930" name="l01930"></a><span class="lineno"> 1930</span>            DynamicManipulatorData = <span class="keyword">new</span> ComputeBuffer(Math.Max(ManipulatorManager.Elements, 1), ManipSize);</div>
<div class="line"><a id="l01931" name="l01931"></a><span class="lineno"> 1931</span> </div>
<div class="line"><a id="l01932" name="l01932"></a><span class="lineno"> 1932</span>            AtomicCounters = <span class="keyword">new</span> ComputeBuffer(8, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
<div class="line"><a id="l01933" name="l01933"></a><span class="lineno"> 1933</span>            EffectParticleData0 = <span class="keyword">new</span> ComputeBuffer(3 * <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a646450d6b4d0d5944bc1a5f7eb25eea6">MaxEffectParticles</a>, <span class="keyword">sizeof</span>(uint));</div>
<div class="line"><a id="l01934" name="l01934"></a><span class="lineno"> 1934</span>            EffectParticleData1 = <span class="keyword">new</span> ComputeBuffer(3 * <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a646450d6b4d0d5944bc1a5f7eb25eea6">MaxEffectParticles</a>, <span class="keyword">sizeof</span>(uint));</div>
<div class="line"><a id="l01935" name="l01935"></a><span class="lineno"> 1935</span> </div>
<div class="line"><a id="l01936" name="l01936"></a><span class="lineno"> 1936</span>            SDFObjectData = <span class="keyword">new</span> ComputeBuffer(Math.Max(ManipulatorManager.SDFObjectList.Count, 1),</div>
<div class="line"><a id="l01937" name="l01937"></a><span class="lineno"> 1937</span>                                                Marshal.SizeOf(typeof(ZibraManipulatorManager.SDFObjectParams)));</div>
<div class="line"><a id="l01938" name="l01938"></a><span class="lineno"> 1938</span>            ManipulatorStatistics = <span class="keyword">new</span> ComputeBuffer(</div>
<div class="line"><a id="l01939" name="l01939"></a><span class="lineno"> 1939</span>                Math.Max(STATISTICS_PER_MANIPULATOR * ManipulatorManager.Elements, 1), <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
<div class="line"><a id="l01940" name="l01940"></a><span class="lineno"> 1940</span> </div>
<div class="line"><a id="l01941" name="l01941"></a><span class="lineno"> 1941</span><span class="preprocessor">#if ZIBRA_EFFECTS_DEBUG</span></div>
<div class="line"><a id="l01942" name="l01942"></a><span class="lineno"> 1942</span>                DynamicManipulatorData.name = <span class="stringliteral">&quot;DynamicManipulatorData&quot;</span>;</div>
<div class="line"><a id="l01943" name="l01943"></a><span class="lineno"> 1943</span>                SDFObjectData.name = <span class="stringliteral">&quot;SDFObjectData&quot;</span>;</div>
<div class="line"><a id="l01944" name="l01944"></a><span class="lineno"> 1944</span>                ManipulatorStatistics.name = <span class="stringliteral">&quot;ManipulatorStatistics&quot;</span>;</div>
<div class="line"><a id="l01945" name="l01945"></a><span class="lineno"> 1945</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01946" name="l01946"></a><span class="lineno"> 1946</span>            var gcparamBuffer2 = GCHandle.Alloc(ManipulatorManager.indices, GCHandleType.Pinned);</div>
<div class="line"><a id="l01947" name="l01947"></a><span class="lineno"> 1947</span> </div>
<div class="line"><a id="l01948" name="l01948"></a><span class="lineno"> 1948</span>            UpdateInteropBuffers();</div>
<div class="line"><a id="l01949" name="l01949"></a><span class="lineno"> 1949</span> </div>
<div class="line"><a id="l01950" name="l01950"></a><span class="lineno"> 1950</span>            var registerManipulatorsBridgeParams = <span class="keyword">new</span> RegisterManipulatorsBridgeParams();</div>
<div class="line"><a id="l01951" name="l01951"></a><span class="lineno"> 1951</span>            registerManipulatorsBridgeParams.ManipulatorNum = ManipulatorManager.Elements;</div>
<div class="line"><a id="l01952" name="l01952"></a><span class="lineno"> 1952</span>            registerManipulatorsBridgeParams.ManipulatorBufferDynamic = GetNativePtr(DynamicManipulatorData);</div>
<div class="line"><a id="l01953" name="l01953"></a><span class="lineno"> 1953</span>            registerManipulatorsBridgeParams.SDFObjectBuffer = GetNativePtr(SDFObjectData);</div>
<div class="line"><a id="l01954" name="l01954"></a><span class="lineno"> 1954</span>            registerManipulatorsBridgeParams.ManipulatorBufferStatistics =</div>
<div class="line"><a id="l01955" name="l01955"></a><span class="lineno"> 1955</span>                ManipulatorStatistics.GetNativeBufferPtr();</div>
<div class="line"><a id="l01956" name="l01956"></a><span class="lineno"> 1956</span>            registerManipulatorsBridgeParams.ManipulatorParams = NativeManipData;</div>
<div class="line"><a id="l01957" name="l01957"></a><span class="lineno"> 1957</span>            registerManipulatorsBridgeParams.SDFObjectCount = ManipulatorManager.SDFObjectList.Count;</div>
<div class="line"><a id="l01958" name="l01958"></a><span class="lineno"> 1958</span>            registerManipulatorsBridgeParams.SDFObjectData = NativeSDFData;</div>
<div class="line"><a id="l01959" name="l01959"></a><span class="lineno"> 1959</span>            registerManipulatorsBridgeParams.ManipIndices = gcparamBuffer2.AddrOfPinnedObject();</div>
<div class="line"><a id="l01960" name="l01960"></a><span class="lineno"> 1960</span>            registerManipulatorsBridgeParams.EmbeddingsTexture = MakeTextureNativeBridge(EmbeddingsTexture);</div>
<div class="line"><a id="l01961" name="l01961"></a><span class="lineno"> 1961</span>            registerManipulatorsBridgeParams.SDFGridTexture = MakeTextureNativeBridge(SDFGridTexture);</div>
<div class="line"><a id="l01962" name="l01962"></a><span class="lineno"> 1962</span> </div>
<div class="line"><a id="l01963" name="l01963"></a><span class="lineno"> 1963</span>            GCHandle embeddingDataHandle = <span class="keywordflow">default</span>(GCHandle);</div>
<div class="line"><a id="l01964" name="l01964"></a><span class="lineno"> 1964</span>            <span class="keywordflow">if</span> (ManipulatorManager.Embeddings.Length &gt; 0)</div>
<div class="line"><a id="l01965" name="l01965"></a><span class="lineno"> 1965</span>            {</div>
<div class="line"><a id="l01966" name="l01966"></a><span class="lineno"> 1966</span>                embeddingDataHandle = GCHandle.Alloc(ManipulatorManager.Embeddings, GCHandleType.Pinned);</div>
<div class="line"><a id="l01967" name="l01967"></a><span class="lineno"> 1967</span>                registerManipulatorsBridgeParams.EmbeddigsData.dataSize =</div>
<div class="line"><a id="l01968" name="l01968"></a><span class="lineno"> 1968</span>                    Marshal.SizeOf(<span class="keyword">new</span> Color32()) * ManipulatorManager.Embeddings.Length;</div>
<div class="line"><a id="l01969" name="l01969"></a><span class="lineno"> 1969</span>                registerManipulatorsBridgeParams.EmbeddigsData.data = embeddingDataHandle.AddrOfPinnedObject();</div>
<div class="line"><a id="l01970" name="l01970"></a><span class="lineno"> 1970</span>                registerManipulatorsBridgeParams.EmbeddigsData.rowPitch =</div>
<div class="line"><a id="l01971" name="l01971"></a><span class="lineno"> 1971</span>                    Marshal.SizeOf(<span class="keyword">new</span> Color32()) * EmbeddingsTexture.width;</div>
<div class="line"><a id="l01972" name="l01972"></a><span class="lineno"> 1972</span>                registerManipulatorsBridgeParams.EmbeddigsData.dimensionX = EmbeddingsTexture.width;</div>
<div class="line"><a id="l01973" name="l01973"></a><span class="lineno"> 1973</span>                registerManipulatorsBridgeParams.EmbeddigsData.dimensionY = EmbeddingsTexture.height;</div>
<div class="line"><a id="l01974" name="l01974"></a><span class="lineno"> 1974</span>                registerManipulatorsBridgeParams.EmbeddigsData.dimensionZ = EmbeddingsTexture.depth;</div>
<div class="line"><a id="l01975" name="l01975"></a><span class="lineno"> 1975</span>            }</div>
<div class="line"><a id="l01976" name="l01976"></a><span class="lineno"> 1976</span> </div>
<div class="line"><a id="l01977" name="l01977"></a><span class="lineno"> 1977</span>            GCHandle sdfGridHandle = <span class="keywordflow">default</span>(GCHandle);</div>
<div class="line"><a id="l01978" name="l01978"></a><span class="lineno"> 1978</span>            <span class="keywordflow">if</span> (ManipulatorManager.SDFGrid.Length &gt; 0)</div>
<div class="line"><a id="l01979" name="l01979"></a><span class="lineno"> 1979</span>            {</div>
<div class="line"><a id="l01980" name="l01980"></a><span class="lineno"> 1980</span>                sdfGridHandle = GCHandle.Alloc(ManipulatorManager.SDFGrid, GCHandleType.Pinned);</div>
<div class="line"><a id="l01981" name="l01981"></a><span class="lineno"> 1981</span>                registerManipulatorsBridgeParams.SDFGridData.dataSize =</div>
<div class="line"><a id="l01982" name="l01982"></a><span class="lineno"> 1982</span>                    Marshal.SizeOf(<span class="keyword">new</span> <span class="keywordtype">byte</span>()) * ManipulatorManager.SDFGrid.Length;</div>
<div class="line"><a id="l01983" name="l01983"></a><span class="lineno"> 1983</span>                registerManipulatorsBridgeParams.SDFGridData.data = sdfGridHandle.AddrOfPinnedObject();</div>
<div class="line"><a id="l01984" name="l01984"></a><span class="lineno"> 1984</span>                registerManipulatorsBridgeParams.SDFGridData.rowPitch =</div>
<div class="line"><a id="l01985" name="l01985"></a><span class="lineno"> 1985</span>                    Marshal.SizeOf(<span class="keyword">new</span> <span class="keywordtype">byte</span>()) * 2 * SDFGridTexture.width;</div>
<div class="line"><a id="l01986" name="l01986"></a><span class="lineno"> 1986</span>                registerManipulatorsBridgeParams.SDFGridData.dimensionX = SDFGridTexture.width;</div>
<div class="line"><a id="l01987" name="l01987"></a><span class="lineno"> 1987</span>                registerManipulatorsBridgeParams.SDFGridData.dimensionY = SDFGridTexture.height;</div>
<div class="line"><a id="l01988" name="l01988"></a><span class="lineno"> 1988</span>                registerManipulatorsBridgeParams.SDFGridData.dimensionZ = SDFGridTexture.depth;</div>
<div class="line"><a id="l01989" name="l01989"></a><span class="lineno"> 1989</span>            }</div>
<div class="line"><a id="l01990" name="l01990"></a><span class="lineno"> 1990</span> </div>
<div class="line"><a id="l01991" name="l01991"></a><span class="lineno"> 1991</span>            IntPtr nativeRegisterManipulatorsBridgeParams =</div>
<div class="line"><a id="l01992" name="l01992"></a><span class="lineno"> 1992</span>                Marshal.AllocHGlobal(Marshal.SizeOf(registerManipulatorsBridgeParams));</div>
<div class="line"><a id="l01993" name="l01993"></a><span class="lineno"> 1993</span>            Marshal.StructureToPtr(registerManipulatorsBridgeParams, nativeRegisterManipulatorsBridgeParams, <span class="keyword">true</span>);</div>
<div class="line"><a id="l01994" name="l01994"></a><span class="lineno"> 1994</span>            solverCommandBuffer.Clear();</div>
<div class="line"><a id="l01995" name="l01995"></a><span class="lineno"> 1995</span>            SmokeAndFireBridge.SubmitInstanceEvent(solverCommandBuffer, CurrentInstanceID,</div>
<div class="line"><a id="l01996" name="l01996"></a><span class="lineno"> 1996</span>                                                    SmokeAndFireBridge.EventID.RegisterManipulators,</div>
<div class="line"><a id="l01997" name="l01997"></a><span class="lineno"> 1997</span>                                                    nativeRegisterManipulatorsBridgeParams);</div>
<div class="line"><a id="l01998" name="l01998"></a><span class="lineno"> 1998</span>            Graphics.ExecuteCommandBuffer(solverCommandBuffer);</div>
<div class="line"><a id="l01999" name="l01999"></a><span class="lineno"> 1999</span> </div>
<div class="line"><a id="l02000" name="l02000"></a><span class="lineno"> 2000</span>            gcparamBuffer2.Free();</div>
<div class="line"><a id="l02001" name="l02001"></a><span class="lineno"> 2001</span>        }</div>
<div class="line"><a id="l02002" name="l02002"></a><span class="lineno"> 2002</span> </div>
<div class="line"><a id="l02003" name="l02003"></a><span class="lineno"> 2003</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> InitializeSolver()</div>
<div class="line"><a id="l02004" name="l02004"></a><span class="lineno"> 2004</span>        {</div>
<div class="line"><a id="l02005" name="l02005"></a><span class="lineno"> 2005</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a7f55e56e8e512bd64f9f5aa3ed880ccb">SimulationInternalTime</a> = 0.0f;</div>
<div class="line"><a id="l02006" name="l02006"></a><span class="lineno"> 2006</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ab372eb0691785420d7d9f5f9a6fad33b">SimulationInternalFrame</a> = 0;</div>
<div class="line"><a id="l02007" name="l02007"></a><span class="lineno"> 2007</span>            simulationParams = <span class="keyword">new</span> SimulationParams();</div>
<div class="line"><a id="l02008" name="l02008"></a><span class="lineno"> 2008</span>            cameraRenderParams = <span class="keyword">new</span> RenderParams();</div>
<div class="line"><a id="l02009" name="l02009"></a><span class="lineno"> 2009</span> </div>
<div class="line"><a id="l02010" name="l02010"></a><span class="lineno"> 2010</span>            <a class="code hl_function" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a5dc665c2e65c71491cb7a92a3db572be">UpdateGridSize</a>();</div>
<div class="line"><a id="l02011" name="l02011"></a><span class="lineno"> 2011</span>            SetSimulationParameters();</div>
<div class="line"><a id="l02012" name="l02012"></a><span class="lineno"> 2012</span> </div>
<div class="line"><a id="l02013" name="l02013"></a><span class="lineno"> 2013</span>            NativeSimulationData = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SimulationParams)));</div>
<div class="line"><a id="l02014" name="l02014"></a><span class="lineno"> 2014</span> </div>
<div class="line"><a id="l02015" name="l02015"></a><span class="lineno"> 2015</span>            InitializeManipulators();</div>
<div class="line"><a id="l02016" name="l02016"></a><span class="lineno"> 2016</span>            FindComputeKernels();</div>
<div class="line"><a id="l02017" name="l02017"></a><span class="lineno"> 2017</span>            SetSimulationParameters();</div>
<div class="line"><a id="l02018" name="l02018"></a><span class="lineno"> 2018</span>            UpdateInteropBuffers();</div>
<div class="line"><a id="l02019" name="l02019"></a><span class="lineno"> 2019</span>            Initialize3DTextures();</div>
<div class="line"><a id="l02020" name="l02020"></a><span class="lineno"> 2020</span>            Clear3DTextures();</div>
<div class="line"><a id="l02021" name="l02021"></a><span class="lineno"> 2021</span>            CalculateWorkgroupSizes();</div>
<div class="line"><a id="l02022" name="l02022"></a><span class="lineno"> 2022</span>            RegisterResources();</div>
<div class="line"><a id="l02023" name="l02023"></a><span class="lineno"> 2023</span> </div>
<div class="line"><a id="l02024" name="l02024"></a><span class="lineno"> 2024</span>            <span class="comment">// create a quad mesh for fullscreen rendering</span></div>
<div class="line"><a id="l02025" name="l02025"></a><span class="lineno"> 2025</span>            renderQuad = PrimitiveHelper.GetPrimitiveMesh(PrimitiveType.Quad);</div>
<div class="line"><a id="l02026" name="l02026"></a><span class="lineno"> 2026</span>        }</div>
<div class="line"><a id="l02027" name="l02027"></a><span class="lineno"> 2027</span> </div>
<div class="line"><a id="l02028" name="l02028"></a><span class="lineno"> 2028</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> SetupScriptableRenderComponents()</div>
<div class="line"><a id="l02029" name="l02029"></a><span class="lineno"> 2029</span>        {</div>
<div class="line"><a id="l02030" name="l02030"></a><span class="lineno"> 2030</span><span class="preprocessor">#if UNITY_PIPELINE_HDRP</span></div>
<div class="line"><a id="l02031" name="l02031"></a><span class="lineno"> 2031</span><span class="preprocessor">#if UNITY_EDITOR</span></div>
<div class="line"><a id="l02032" name="l02032"></a><span class="lineno"> 2032</span>            <span class="keywordflow">if</span> (<a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html">RenderPipelineDetector</a>.<a class="code hl_function" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html#af6ca78a99c6f090da4112d31624fbd08">GetRenderPipelineType</a>() == <a class="code hl_class" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html">RenderPipelineDetector</a>.<a class="code hl_enumeration" href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html#a4b4059d56eb5d1eb4843d2d6c7ba77a7">RenderPipeline</a>.HDRP)</div>
<div class="line"><a id="l02033" name="l02033"></a><span class="lineno"> 2033</span>            {</div>
<div class="line"><a id="l02034" name="l02034"></a><span class="lineno"> 2034</span>                HDRPRenderer = gameObject.GetComponent&lt;SmokeAndFireHDRPRenderComponent&gt;();</div>
<div class="line"><a id="l02035" name="l02035"></a><span class="lineno"> 2035</span>                <span class="keywordflow">if</span> (HDRPRenderer != <span class="keyword">null</span> &amp;&amp; HDRPRenderer.customPasses.Count == 0)</div>
<div class="line"><a id="l02036" name="l02036"></a><span class="lineno"> 2036</span>                {</div>
<div class="line"><a id="l02037" name="l02037"></a><span class="lineno"> 2037</span>                    DestroyImmediate(HDRPRenderer);</div>
<div class="line"><a id="l02038" name="l02038"></a><span class="lineno"> 2038</span>                    HDRPRenderer = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02039" name="l02039"></a><span class="lineno"> 2039</span>                }</div>
<div class="line"><a id="l02040" name="l02040"></a><span class="lineno"> 2040</span>                <span class="keywordflow">if</span> (HDRPRenderer == <span class="keyword">null</span>)</div>
<div class="line"><a id="l02041" name="l02041"></a><span class="lineno"> 2041</span>                {</div>
<div class="line"><a id="l02042" name="l02042"></a><span class="lineno"> 2042</span>                    HDRPRenderer = gameObject.AddComponent&lt;SmokeAndFireHDRPRenderComponent&gt;();</div>
<div class="line"><a id="l02043" name="l02043"></a><span class="lineno"> 2043</span>                    HDRPRenderer.injectionPoint = CustomPassInjectionPoint.BeforePostProcess;</div>
<div class="line"><a id="l02044" name="l02044"></a><span class="lineno"> 2044</span>                    HDRPRenderer.AddPassOfType(typeof(SmokeAndFireHDRPRenderComponent.FluidHDRPRender));</div>
<div class="line"><a id="l02045" name="l02045"></a><span class="lineno"> 2045</span>                    SmokeAndFireHDRPRenderComponent.FluidHDRPRender renderer =</div>
<div class="line"><a id="l02046" name="l02046"></a><span class="lineno"> 2046</span>                        HDRPRenderer.customPasses[0] as SmokeAndFireHDRPRenderComponent.FluidHDRPRender;</div>
<div class="line"><a id="l02047" name="l02047"></a><span class="lineno"> 2047</span>                    renderer.name = <span class="stringliteral">&quot;ZibraSmokeAndFireRenderer&quot;</span>;</div>
<div class="line"><a id="l02048" name="l02048"></a><span class="lineno"> 2048</span>                    renderer.smokeAndFire = <span class="keyword">this</span>;</div>
<div class="line"><a id="l02049" name="l02049"></a><span class="lineno"> 2049</span>                }</div>
<div class="line"><a id="l02050" name="l02050"></a><span class="lineno"> 2050</span>            }</div>
<div class="line"><a id="l02051" name="l02051"></a><span class="lineno"> 2051</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l02052" name="l02052"></a><span class="lineno"> 2052</span><span class="preprocessor">#endif </span><span class="comment">// UNITY_PIPELINE_HDRP</span></div>
<div class="line"><a id="l02053" name="l02053"></a><span class="lineno"> 2053</span>        }</div>
<div class="line"><a id="l02054" name="l02054"></a><span class="lineno"> 2054</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l02055" name="l02055"></a><span class="lineno"> 2055</span> </div>
<div class="line"><a id="l02056" name="l02056"></a><span class="lineno"> 2056</span><span class="preprocessor">#region Cleanup</span></div>
<div class="line"><a id="l02057" name="l02057"></a><span class="lineno"> 2057</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ClearRendering()</div>
<div class="line"><a id="l02058" name="l02058"></a><span class="lineno"> 2058</span>        {</div>
<div class="line"><a id="l02059" name="l02059"></a><span class="lineno"> 2059</span>            Camera.onPreRender -= RenderCallBackWrapper;</div>
<div class="line"><a id="l02060" name="l02060"></a><span class="lineno"> 2060</span> </div>
<div class="line"><a id="l02061" name="l02061"></a><span class="lineno"> 2061</span>            ClearCameraCommandBuffers();</div>
<div class="line"><a id="l02062" name="l02062"></a><span class="lineno"> 2062</span> </div>
<div class="line"><a id="l02063" name="l02063"></a><span class="lineno"> 2063</span>            <span class="comment">// free allocated memory</span></div>
<div class="line"><a id="l02064" name="l02064"></a><span class="lineno"> 2064</span>            <span class="keywordflow">foreach</span> (var data <span class="keywordflow">in</span> camNativeParams)</div>
<div class="line"><a id="l02065" name="l02065"></a><span class="lineno"> 2065</span>            {</div>
<div class="line"><a id="l02066" name="l02066"></a><span class="lineno"> 2066</span>                Marshal.FreeHGlobal(data.Value);</div>
<div class="line"><a id="l02067" name="l02067"></a><span class="lineno"> 2067</span>            }</div>
<div class="line"><a id="l02068" name="l02068"></a><span class="lineno"> 2068</span> </div>
<div class="line"><a id="l02069" name="l02069"></a><span class="lineno"> 2069</span>            cameraResources.Clear();</div>
<div class="line"><a id="l02070" name="l02070"></a><span class="lineno"> 2070</span> </div>
<div class="line"><a id="l02071" name="l02071"></a><span class="lineno"> 2071</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(SDFGridTexture);</div>
<div class="line"><a id="l02072" name="l02072"></a><span class="lineno"> 2072</span>            SDFGridTexture = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02073" name="l02073"></a><span class="lineno"> 2073</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(EmbeddingsTexture);</div>
<div class="line"><a id="l02074" name="l02074"></a><span class="lineno"> 2074</span>            EmbeddingsTexture = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02075" name="l02075"></a><span class="lineno"> 2075</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(EmittersColorsTexture);</div>
<div class="line"><a id="l02076" name="l02076"></a><span class="lineno"> 2076</span>            EmittersColorsTexture = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02077" name="l02077"></a><span class="lineno"> 2077</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(EmittersSpriteTexture);</div>
<div class="line"><a id="l02078" name="l02078"></a><span class="lineno"> 2078</span>            EmittersSpriteTexture = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02079" name="l02079"></a><span class="lineno"> 2079</span>            camNativeParams.Clear();</div>
<div class="line"><a id="l02080" name="l02080"></a><span class="lineno"> 2080</span>        }</div>
<div class="line"><a id="l02081" name="l02081"></a><span class="lineno"> 2081</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ClearSolver()</div>
<div class="line"><a id="l02082" name="l02082"></a><span class="lineno"> 2082</span>        {</div>
<div class="line"><a id="l02083" name="l02083"></a><span class="lineno"> 2083</span>            <span class="keywordflow">if</span> (solverCommandBuffer != <span class="keyword">null</span>)</div>
<div class="line"><a id="l02084" name="l02084"></a><span class="lineno"> 2084</span>            {</div>
<div class="line"><a id="l02085" name="l02085"></a><span class="lineno"> 2085</span>                SmokeAndFireBridge.SubmitInstanceEvent(solverCommandBuffer, CurrentInstanceID,</div>
<div class="line"><a id="l02086" name="l02086"></a><span class="lineno"> 2086</span>                                                       SmokeAndFireBridge.EventID.ReleaseResources);</div>
<div class="line"><a id="l02087" name="l02087"></a><span class="lineno"> 2087</span>                Graphics.ExecuteCommandBuffer(solverCommandBuffer);</div>
<div class="line"><a id="l02088" name="l02088"></a><span class="lineno"> 2088</span>            }</div>
<div class="line"><a id="l02089" name="l02089"></a><span class="lineno"> 2089</span> </div>
<div class="line"><a id="l02090" name="l02090"></a><span class="lineno"> 2090</span>            <span class="keywordflow">if</span> (solverCommandBuffer != <span class="keyword">null</span>)</div>
<div class="line"><a id="l02091" name="l02091"></a><span class="lineno"> 2091</span>            {</div>
<div class="line"><a id="l02092" name="l02092"></a><span class="lineno"> 2092</span>                solverCommandBuffer.Release();</div>
<div class="line"><a id="l02093" name="l02093"></a><span class="lineno"> 2093</span>                solverCommandBuffer = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02094" name="l02094"></a><span class="lineno"> 2094</span>            }</div>
<div class="line"><a id="l02095" name="l02095"></a><span class="lineno"> 2095</span> </div>
<div class="line"><a id="l02096" name="l02096"></a><span class="lineno"> 2096</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(SDFObjectData);</div>
<div class="line"><a id="l02097" name="l02097"></a><span class="lineno"> 2097</span>            SDFObjectData = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02098" name="l02098"></a><span class="lineno"> 2098</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(ManipulatorStatistics);</div>
<div class="line"><a id="l02099" name="l02099"></a><span class="lineno"> 2099</span>            ManipulatorStatistics = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02100" name="l02100"></a><span class="lineno"> 2100</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(DynamicManipulatorData);</div>
<div class="line"><a id="l02101" name="l02101"></a><span class="lineno"> 2101</span>            ManipulatorStatistics = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02102" name="l02102"></a><span class="lineno"> 2102</span>            Marshal.FreeHGlobal(NativeManipData);</div>
<div class="line"><a id="l02103" name="l02103"></a><span class="lineno"> 2103</span>            NativeManipData = IntPtr.Zero;</div>
<div class="line"><a id="l02104" name="l02104"></a><span class="lineno"> 2104</span>            Marshal.FreeHGlobal(NativeSimulationData);</div>
<div class="line"><a id="l02105" name="l02105"></a><span class="lineno"> 2105</span>            NativeSimulationData = IntPtr.Zero;</div>
<div class="line"><a id="l02106" name="l02106"></a><span class="lineno"> 2106</span> </div>
<div class="line"><a id="l02107" name="l02107"></a><span class="lineno"> 2107</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(VelocityTexture0);</div>
<div class="line"><a id="l02108" name="l02108"></a><span class="lineno"> 2108</span>            VelocityTexture0 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02109" name="l02109"></a><span class="lineno"> 2109</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(VelocityTexture1);</div>
<div class="line"><a id="l02110" name="l02110"></a><span class="lineno"> 2110</span>            VelocityTexture1 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02111" name="l02111"></a><span class="lineno"> 2111</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(TmpSDFTexture);</div>
<div class="line"><a id="l02112" name="l02112"></a><span class="lineno"> 2112</span>            TmpSDFTexture = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02113" name="l02113"></a><span class="lineno"> 2113</span> </div>
<div class="line"><a id="l02114" name="l02114"></a><span class="lineno"> 2114</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(RenderColor);</div>
<div class="line"><a id="l02115" name="l02115"></a><span class="lineno"> 2115</span>            RenderColor = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02116" name="l02116"></a><span class="lineno"> 2116</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(RenderDensity);</div>
<div class="line"><a id="l02117" name="l02117"></a><span class="lineno"> 2117</span>            RenderDensity = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02118" name="l02118"></a><span class="lineno"> 2118</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(RenderDensityLOD);</div>
<div class="line"><a id="l02119" name="l02119"></a><span class="lineno"> 2119</span>            RenderDensityLOD = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02120" name="l02120"></a><span class="lineno"> 2120</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(RenderIllumination);</div>
<div class="line"><a id="l02121" name="l02121"></a><span class="lineno"> 2121</span>            RenderIllumination = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02122" name="l02122"></a><span class="lineno"> 2122</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(ColorTexture0);</div>
<div class="line"><a id="l02123" name="l02123"></a><span class="lineno"> 2123</span>            ColorTexture0 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02124" name="l02124"></a><span class="lineno"> 2124</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(ColorTexture1);</div>
<div class="line"><a id="l02125" name="l02125"></a><span class="lineno"> 2125</span>            ColorTexture1 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02126" name="l02126"></a><span class="lineno"> 2126</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(Divergence);</div>
<div class="line"><a id="l02127" name="l02127"></a><span class="lineno"> 2127</span>            Divergence = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02128" name="l02128"></a><span class="lineno"> 2128</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(ResidualLOD0);</div>
<div class="line"><a id="l02129" name="l02129"></a><span class="lineno"> 2129</span>            ResidualLOD0 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02130" name="l02130"></a><span class="lineno"> 2130</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(ResidualLOD1);</div>
<div class="line"><a id="l02131" name="l02131"></a><span class="lineno"> 2131</span>            ResidualLOD1 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02132" name="l02132"></a><span class="lineno"> 2132</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(ResidualLOD2);</div>
<div class="line"><a id="l02133" name="l02133"></a><span class="lineno"> 2133</span>            ResidualLOD2 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02134" name="l02134"></a><span class="lineno"> 2134</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(Pressure0LOD0);</div>
<div class="line"><a id="l02135" name="l02135"></a><span class="lineno"> 2135</span>            Pressure0LOD0 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02136" name="l02136"></a><span class="lineno"> 2136</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(Pressure0LOD1);</div>
<div class="line"><a id="l02137" name="l02137"></a><span class="lineno"> 2137</span>            Pressure0LOD1 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02138" name="l02138"></a><span class="lineno"> 2138</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(Pressure0LOD2);</div>
<div class="line"><a id="l02139" name="l02139"></a><span class="lineno"> 2139</span>            Pressure0LOD2 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02140" name="l02140"></a><span class="lineno"> 2140</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(Pressure1LOD0);</div>
<div class="line"><a id="l02141" name="l02141"></a><span class="lineno"> 2141</span>            Pressure1LOD0 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02142" name="l02142"></a><span class="lineno"> 2142</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(Pressure1LOD1);</div>
<div class="line"><a id="l02143" name="l02143"></a><span class="lineno"> 2143</span>            Pressure1LOD1 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02144" name="l02144"></a><span class="lineno"> 2144</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(Pressure1LOD2);</div>
<div class="line"><a id="l02145" name="l02145"></a><span class="lineno"> 2145</span>            Pressure1LOD2 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02146" name="l02146"></a><span class="lineno"> 2146</span> </div>
<div class="line"><a id="l02147" name="l02147"></a><span class="lineno"> 2147</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(AtomicCounters);</div>
<div class="line"><a id="l02148" name="l02148"></a><span class="lineno"> 2148</span>            AtomicCounters = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02149" name="l02149"></a><span class="lineno"> 2149</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(EffectParticleData0);</div>
<div class="line"><a id="l02150" name="l02150"></a><span class="lineno"> 2150</span>            EffectParticleData0 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02151" name="l02151"></a><span class="lineno"> 2151</span>            ZibraSmokeAndFireGPUGarbageCollector.SafeRelease(EffectParticleData1);</div>
<div class="line"><a id="l02152" name="l02152"></a><span class="lineno"> 2152</span>            EffectParticleData1 = <span class="keyword">null</span>;</div>
<div class="line"><a id="l02153" name="l02153"></a><span class="lineno"> 2153</span> </div>
<div class="line"><a id="l02154" name="l02154"></a><span class="lineno"> 2154</span>            CurrentTextureResolution = <span class="keyword">new</span> Vector2Int(0, 0);</div>
<div class="line"><a id="l02155" name="l02155"></a><span class="lineno"> 2155</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a> = <span class="keyword">new</span> Vector3Int(0, 0, 0);</div>
<div class="line"><a id="l02156" name="l02156"></a><span class="lineno"> 2156</span>            NumNodes = 0;</div>
<div class="line"><a id="l02157" name="l02157"></a><span class="lineno"> 2157</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ab372eb0691785420d7d9f5f9a6fad33b">SimulationInternalFrame</a> = 0;</div>
<div class="line"><a id="l02158" name="l02158"></a><span class="lineno"> 2158</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a7f55e56e8e512bd64f9f5aa3ed880ccb">SimulationInternalTime</a> = 0.0f;</div>
<div class="line"><a id="l02159" name="l02159"></a><span class="lineno"> 2159</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#abe78de671d42526358a0d4fa561437bc">LastTimestep</a> = 0.0f;</div>
<div class="line"><a id="l02160" name="l02160"></a><span class="lineno"> 2160</span>            camRenderResolutions.Clear();</div>
<div class="line"><a id="l02161" name="l02161"></a><span class="lineno"> 2161</span>            camNativeResolutions.Clear();</div>
<div class="line"><a id="l02162" name="l02162"></a><span class="lineno"> 2162</span> </div>
<div class="line"><a id="l02163" name="l02163"></a><span class="lineno"> 2163</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l02164" name="l02164"></a><span class="lineno"> 2164</span> </div>
<div class="line"><a id="l02165" name="l02165"></a><span class="lineno"> 2165</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6d4293288031a149d20f7884389e1505">ActiveSimulationMode</a> = 0;</div>
<div class="line"><a id="l02166" name="l02166"></a><span class="lineno"> 2166</span> </div>
<div class="line"><a id="l02167" name="l02167"></a><span class="lineno"> 2167</span>            CopyDepthID = 0;</div>
<div class="line"><a id="l02168" name="l02168"></a><span class="lineno"> 2168</span>            ClearTexture3DFloatID = 0;</div>
<div class="line"><a id="l02169" name="l02169"></a><span class="lineno"> 2169</span>            ClearTexture3DFloat2ID = 0;</div>
<div class="line"><a id="l02170" name="l02170"></a><span class="lineno"> 2170</span>            ClearTexture3DFloat3ID = 0;</div>
<div class="line"><a id="l02171" name="l02171"></a><span class="lineno"> 2171</span>            ClearTexture3DFloat4ID = 0;</div>
<div class="line"><a id="l02172" name="l02172"></a><span class="lineno"> 2172</span>            DownscaleXYZ = Vector3Int.zero;</div>
<div class="line"><a id="l02173" name="l02173"></a><span class="lineno"> 2173</span>            GridDownscale = 0;</div>
<div class="line"><a id="l02174" name="l02174"></a><span class="lineno"> 2174</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a> = Vector3Int.zero;</div>
<div class="line"><a id="l02175" name="l02175"></a><span class="lineno"> 2175</span>            GridSizeLOD = Vector3Int.zero;</div>
<div class="line"><a id="l02176" name="l02176"></a><span class="lineno"> 2176</span>            IlluminationID = 0;</div>
<div class="line"><a id="l02177" name="l02177"></a><span class="lineno"> 2177</span>            LightGridSize = Vector3Int.zero;</div>
<div class="line"><a id="l02178" name="l02178"></a><span class="lineno"> 2178</span>            LightWorkGroupsXYZ = Vector3Int.zero;</div>
<div class="line"><a id="l02179" name="l02179"></a><span class="lineno"> 2179</span>            LightmapID = 0;</div>
<div class="line"><a id="l02180" name="l02180"></a><span class="lineno"> 2180</span>            MaxEffectParticleWorkgroups = 0;</div>
<div class="line"><a id="l02181" name="l02181"></a><span class="lineno"> 2181</span>            NumNodes = 0;</div>
<div class="line"><a id="l02182" name="l02182"></a><span class="lineno"> 2182</span>            ShadowGridSize = Vector3Int.zero;</div>
<div class="line"><a id="l02183" name="l02183"></a><span class="lineno"> 2183</span>            ShadowWorkGroupsXYZ = Vector3Int.zero;</div>
<div class="line"><a id="l02184" name="l02184"></a><span class="lineno"> 2184</span>            timeAccumulation = 0;</div>
<div class="line"><a id="l02185" name="l02185"></a><span class="lineno"> 2185</span> </div>
<div class="line"><a id="l02186" name="l02186"></a><span class="lineno"> 2186</span>            ManipulatorManager.Clear();</div>
<div class="line"><a id="l02187" name="l02187"></a><span class="lineno"> 2187</span> </div>
<div class="line"><a id="l02188" name="l02188"></a><span class="lineno"> 2188</span>            <span class="comment">// DO NOT USE AllInstances.Remove(this)</span></div>
<div class="line"><a id="l02189" name="l02189"></a><span class="lineno"> 2189</span>            <span class="comment">// This will not result in equivalent code</span></div>
<div class="line"><a id="l02190" name="l02190"></a><span class="lineno"> 2190</span>            <span class="comment">// ZibraSmokeAndFire::Equals is overriden and don&#39;t have correct implementation</span></div>
<div class="line"><a id="l02191" name="l02191"></a><span class="lineno"> 2191</span> </div>
<div class="line"><a id="l02192" name="l02192"></a><span class="lineno"> 2192</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ae6f6139d03c6cb1987d13cac50d24523">AllInstances</a> != <span class="keyword">null</span>)</div>
<div class="line"><a id="l02193" name="l02193"></a><span class="lineno"> 2193</span>            {</div>
<div class="line"><a id="l02194" name="l02194"></a><span class="lineno"> 2194</span>                <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ae6f6139d03c6cb1987d13cac50d24523">AllInstances</a>.Count; i++)</div>
<div class="line"><a id="l02195" name="l02195"></a><span class="lineno"> 2195</span>                {</div>
<div class="line"><a id="l02196" name="l02196"></a><span class="lineno"> 2196</span>                    var fluid = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ae6f6139d03c6cb1987d13cac50d24523">AllInstances</a>[i];</div>
<div class="line"><a id="l02197" name="l02197"></a><span class="lineno"> 2197</span>                    <span class="keywordflow">if</span> (ReferenceEquals(fluid, <span class="keyword">this</span>))</div>
<div class="line"><a id="l02198" name="l02198"></a><span class="lineno"> 2198</span>                    {</div>
<div class="line"><a id="l02199" name="l02199"></a><span class="lineno"> 2199</span>                        <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ae6f6139d03c6cb1987d13cac50d24523">AllInstances</a>.RemoveAt(i);</div>
<div class="line"><a id="l02200" name="l02200"></a><span class="lineno"> 2200</span>                        <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l02201" name="l02201"></a><span class="lineno"> 2201</span>                    }</div>
<div class="line"><a id="l02202" name="l02202"></a><span class="lineno"> 2202</span>                }</div>
<div class="line"><a id="l02203" name="l02203"></a><span class="lineno"> 2203</span>            }</div>
<div class="line"><a id="l02204" name="l02204"></a><span class="lineno"> 2204</span>        }</div>
<div class="line"><a id="l02205" name="l02205"></a><span class="lineno"> 2205</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ClearCameraCommandBuffers()</div>
<div class="line"><a id="l02206" name="l02206"></a><span class="lineno"> 2206</span>        {</div>
<div class="line"><a id="l02207" name="l02207"></a><span class="lineno"> 2207</span>            <span class="comment">// clear all rendering command buffers if not rendering</span></div>
<div class="line"><a id="l02208" name="l02208"></a><span class="lineno"> 2208</span>            <span class="keywordflow">foreach</span> (KeyValuePair&lt;Camera, CommandBuffer&gt; entry <span class="keywordflow">in</span> cameraCBs)</div>
<div class="line"><a id="l02209" name="l02209"></a><span class="lineno"> 2209</span>            {</div>
<div class="line"><a id="l02210" name="l02210"></a><span class="lineno"> 2210</span>                <span class="keywordflow">if</span> (entry.Key != <span class="keyword">null</span>)</div>
<div class="line"><a id="l02211" name="l02211"></a><span class="lineno"> 2211</span>                {</div>
<div class="line"><a id="l02212" name="l02212"></a><span class="lineno"> 2212</span>                    entry.Key.RemoveCommandBuffer(ActiveInjectionPoint, entry.Value);</div>
<div class="line"><a id="l02213" name="l02213"></a><span class="lineno"> 2213</span>                }</div>
<div class="line"><a id="l02214" name="l02214"></a><span class="lineno"> 2214</span>            }</div>
<div class="line"><a id="l02215" name="l02215"></a><span class="lineno"> 2215</span>            cameraCBs.Clear();</div>
<div class="line"><a id="l02216" name="l02216"></a><span class="lineno"> 2216</span>            cameras.Clear();</div>
<div class="line"><a id="l02217" name="l02217"></a><span class="lineno"> 2217</span>        }</div>
<div class="line"><a id="l02218" name="l02218"></a><span class="lineno"> 2218</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l02219" name="l02219"></a><span class="lineno"> 2219</span> </div>
<div class="line"><a id="l02220" name="l02220"></a><span class="lineno"> 2220</span><span class="preprocessor">#region Structures</span></div>
<div class="line"><a id="l02221" name="l02221"></a><span class="lineno"> 2221</span> </div>
<div class="line"><a id="l02222" name="l02222"></a><span class="lineno"> 2222</span>        [StructLayout(LayoutKind.Sequential)]</div>
<div class="line"><a id="l02223" name="l02223"></a><span class="lineno"> 2223</span>        <span class="keyword">private</span> <span class="keyword">class </span>UnityTextureBridge</div>
<div class="line"><a id="l02224" name="l02224"></a><span class="lineno"> 2224</span>        {</div>
<div class="line"><a id="l02225" name="l02225"></a><span class="lineno"> 2225</span>            <span class="keyword">public</span> IntPtr texture;</div>
<div class="line"><a id="l02226" name="l02226"></a><span class="lineno"> 2226</span>            <span class="keyword">public</span> SmokeAndFireBridge.TextureFormat format;</div>
<div class="line"><a id="l02227" name="l02227"></a><span class="lineno"> 2227</span>        }</div>
<div class="line"><a id="l02228" name="l02228"></a><span class="lineno"> 2228</span> </div>
<div class="line"><a id="l02229" name="l02229"></a><span class="lineno"> 2229</span>        [StructLayout(LayoutKind.Sequential)]</div>
<div class="line"><a id="l02230" name="l02230"></a><span class="lineno"> 2230</span>        <span class="keyword">private</span> <span class="keyword">class </span>RegisterBuffersBridgeParams</div>
<div class="line"><a id="l02231" name="l02231"></a><span class="lineno"> 2231</span>        {</div>
<div class="line"><a id="l02232" name="l02232"></a><span class="lineno"> 2232</span>            <span class="keyword">public</span> IntPtr SimulationParams;</div>
<div class="line"><a id="l02233" name="l02233"></a><span class="lineno"> 2233</span>            <span class="keyword">public</span> UnityTextureBridge RenderDensity;</div>
<div class="line"><a id="l02234" name="l02234"></a><span class="lineno"> 2234</span>            <span class="keyword">public</span> UnityTextureBridge RenderColor;</div>
<div class="line"><a id="l02235" name="l02235"></a><span class="lineno"> 2235</span>            <span class="keyword">public</span> UnityTextureBridge RenderIllumination;</div>
<div class="line"><a id="l02236" name="l02236"></a><span class="lineno"> 2236</span>            <span class="keyword">public</span> UnityTextureBridge ColorTexture0;</div>
<div class="line"><a id="l02237" name="l02237"></a><span class="lineno"> 2237</span>            <span class="keyword">public</span> UnityTextureBridge VelocityTexture0;</div>
<div class="line"><a id="l02238" name="l02238"></a><span class="lineno"> 2238</span>            <span class="keyword">public</span> UnityTextureBridge ColorTexture1;</div>
<div class="line"><a id="l02239" name="l02239"></a><span class="lineno"> 2239</span>            <span class="keyword">public</span> UnityTextureBridge VelocityTexture1;</div>
<div class="line"><a id="l02240" name="l02240"></a><span class="lineno"> 2240</span>            <span class="keyword">public</span> UnityTextureBridge TmpSDFTexture;</div>
<div class="line"><a id="l02241" name="l02241"></a><span class="lineno"> 2241</span>            <span class="keyword">public</span> UnityTextureBridge Divergence;</div>
<div class="line"><a id="l02242" name="l02242"></a><span class="lineno"> 2242</span>            <span class="keyword">public</span> UnityTextureBridge ResidualLOD0;</div>
<div class="line"><a id="l02243" name="l02243"></a><span class="lineno"> 2243</span>            <span class="keyword">public</span> UnityTextureBridge ResidualLOD1;</div>
<div class="line"><a id="l02244" name="l02244"></a><span class="lineno"> 2244</span>            <span class="keyword">public</span> UnityTextureBridge ResidualLOD2;</div>
<div class="line"><a id="l02245" name="l02245"></a><span class="lineno"> 2245</span>            <span class="keyword">public</span> UnityTextureBridge Pressure0LOD0;</div>
<div class="line"><a id="l02246" name="l02246"></a><span class="lineno"> 2246</span>            <span class="keyword">public</span> UnityTextureBridge Pressure0LOD1;</div>
<div class="line"><a id="l02247" name="l02247"></a><span class="lineno"> 2247</span>            <span class="keyword">public</span> UnityTextureBridge Pressure0LOD2;</div>
<div class="line"><a id="l02248" name="l02248"></a><span class="lineno"> 2248</span>            <span class="keyword">public</span> UnityTextureBridge Pressure1LOD0;</div>
<div class="line"><a id="l02249" name="l02249"></a><span class="lineno"> 2249</span>            <span class="keyword">public</span> UnityTextureBridge Pressure1LOD1;</div>
<div class="line"><a id="l02250" name="l02250"></a><span class="lineno"> 2250</span>            <span class="keyword">public</span> UnityTextureBridge Pressure1LOD2;</div>
<div class="line"><a id="l02251" name="l02251"></a><span class="lineno"> 2251</span>            <span class="keyword">public</span> IntPtr AtomicCounters;</div>
<div class="line"><a id="l02252" name="l02252"></a><span class="lineno"> 2252</span>            <span class="keyword">public</span> UnityTextureBridge RandomTexture;</div>
<div class="line"><a id="l02253" name="l02253"></a><span class="lineno"> 2253</span>            <span class="keyword">public</span> TextureUploadData RandomData;</div>
<div class="line"><a id="l02254" name="l02254"></a><span class="lineno"> 2254</span>            <span class="keyword">public</span> IntPtr EffectParticleData0;</div>
<div class="line"><a id="l02255" name="l02255"></a><span class="lineno"> 2255</span>            <span class="keyword">public</span> IntPtr EffectParticleData1;</div>
<div class="line"><a id="l02256" name="l02256"></a><span class="lineno"> 2256</span>            <span class="keyword">public</span> UnityTextureBridge RenderDensityLOD;</div>
<div class="line"><a id="l02257" name="l02257"></a><span class="lineno"> 2257</span>            <span class="keyword">public</span> UnityTextureBridge EmitterTexture;</div>
<div class="line"><a id="l02258" name="l02258"></a><span class="lineno"> 2258</span>        }</div>
<div class="line"><a id="l02259" name="l02259"></a><span class="lineno"> 2259</span> </div>
<div class="line"><a id="l02260" name="l02260"></a><span class="lineno"> 2260</span>        [StructLayout(LayoutKind.Sequential)]</div>
<div class="line"><a id="l02261" name="l02261"></a><span class="lineno"> 2261</span>        <span class="keyword">private</span> <span class="keyword">class </span>RegisterRenderResourcesBridgeParams</div>
<div class="line"><a id="l02262" name="l02262"></a><span class="lineno"> 2262</span>        {</div>
<div class="line"><a id="l02263" name="l02263"></a><span class="lineno"> 2263</span>            <span class="keyword">public</span> UnityTextureBridge ParticleColors;</div>
<div class="line"><a id="l02264" name="l02264"></a><span class="lineno"> 2264</span>            <span class="keyword">public</span> UnityTextureBridge ParticleSprites;</div>
<div class="line"><a id="l02265" name="l02265"></a><span class="lineno"> 2265</span>            <span class="keyword">public</span> UnityTextureBridge Depth;</div>
<div class="line"><a id="l02266" name="l02266"></a><span class="lineno"> 2266</span>            <span class="keyword">public</span> UnityTextureBridge ParticlesRT;</div>
<div class="line"><a id="l02267" name="l02267"></a><span class="lineno"> 2267</span>        }</div>
<div class="line"><a id="l02268" name="l02268"></a><span class="lineno"> 2268</span> </div>
<div class="line"><a id="l02269" name="l02269"></a><span class="lineno"> 2269</span>        [StructLayout(LayoutKind.Sequential)]</div>
<div class="line"><a id="l02270" name="l02270"></a><span class="lineno"> 2270</span>        <span class="keyword">private</span> <span class="keyword">class </span>InitializeGPUReadbackParams</div>
<div class="line"><a id="l02271" name="l02271"></a><span class="lineno"> 2271</span>        {</div>
<div class="line"><a id="l02272" name="l02272"></a><span class="lineno"> 2272</span>            <span class="keyword">public</span> UInt32 readbackBufferSize;</div>
<div class="line"><a id="l02273" name="l02273"></a><span class="lineno"> 2273</span>            <span class="keyword">public</span> Int32 maxFramesInFlight;</div>
<div class="line"><a id="l02274" name="l02274"></a><span class="lineno"> 2274</span>        }</div>
<div class="line"><a id="l02275" name="l02275"></a><span class="lineno"> 2275</span> </div>
<div class="line"><a id="l02276" name="l02276"></a><span class="lineno"> 2276</span>        [StructLayout(LayoutKind.Sequential)]</div>
<div class="line"><a id="l02277" name="l02277"></a><span class="lineno"> 2277</span>        <span class="keyword">private</span> <span class="keyword">struct </span>TextureUploadData</div>
<div class="line"><a id="l02278" name="l02278"></a><span class="lineno"> 2278</span>        {</div>
<div class="line"><a id="l02279" name="l02279"></a><span class="lineno"> 2279</span>            <span class="keyword">public</span> IntPtr data;</div>
<div class="line"><a id="l02280" name="l02280"></a><span class="lineno"> 2280</span>            <span class="keyword">public</span> Int32 dataSize;</div>
<div class="line"><a id="l02281" name="l02281"></a><span class="lineno"> 2281</span>            <span class="keyword">public</span> Int32 rowPitch;</div>
<div class="line"><a id="l02282" name="l02282"></a><span class="lineno"> 2282</span>            <span class="keyword">public</span> Int32 dimensionX;</div>
<div class="line"><a id="l02283" name="l02283"></a><span class="lineno"> 2283</span>            <span class="keyword">public</span> Int32 dimensionY;</div>
<div class="line"><a id="l02284" name="l02284"></a><span class="lineno"> 2284</span>            <span class="keyword">public</span> Int32 dimensionZ;</div>
<div class="line"><a id="l02285" name="l02285"></a><span class="lineno"> 2285</span>        };</div>
<div class="line"><a id="l02286" name="l02286"></a><span class="lineno"> 2286</span> </div>
<div class="line"><a id="l02287" name="l02287"></a><span class="lineno"> 2287</span>        [StructLayout(LayoutKind.Sequential)]</div>
<div class="line"><a id="l02288" name="l02288"></a><span class="lineno"> 2288</span>        <span class="keyword">private</span> <span class="keyword">class </span>RegisterManipulatorsBridgeParams</div>
<div class="line"><a id="l02289" name="l02289"></a><span class="lineno"> 2289</span>        {</div>
<div class="line"><a id="l02290" name="l02290"></a><span class="lineno"> 2290</span>            <span class="keyword">public</span> Int32 ManipulatorNum;</div>
<div class="line"><a id="l02291" name="l02291"></a><span class="lineno"> 2291</span>            <span class="keyword">public</span> IntPtr ManipulatorBufferDynamic;</div>
<div class="line"><a id="l02292" name="l02292"></a><span class="lineno"> 2292</span>            <span class="keyword">public</span> IntPtr SDFObjectBuffer;</div>
<div class="line"><a id="l02293" name="l02293"></a><span class="lineno"> 2293</span>            <span class="keyword">public</span> IntPtr ManipulatorBufferStatistics;</div>
<div class="line"><a id="l02294" name="l02294"></a><span class="lineno"> 2294</span>            <span class="keyword">public</span> IntPtr ManipulatorParams;</div>
<div class="line"><a id="l02295" name="l02295"></a><span class="lineno"> 2295</span>            <span class="keyword">public</span> Int32 SDFObjectCount;</div>
<div class="line"><a id="l02296" name="l02296"></a><span class="lineno"> 2296</span>            <span class="keyword">public</span> IntPtr SDFObjectData;</div>
<div class="line"><a id="l02297" name="l02297"></a><span class="lineno"> 2297</span>            <span class="keyword">public</span> IntPtr ManipIndices;</div>
<div class="line"><a id="l02298" name="l02298"></a><span class="lineno"> 2298</span>            <span class="keyword">public</span> UnityTextureBridge EmbeddingsTexture;</div>
<div class="line"><a id="l02299" name="l02299"></a><span class="lineno"> 2299</span>            <span class="keyword">public</span> UnityTextureBridge SDFGridTexture;</div>
<div class="line"><a id="l02300" name="l02300"></a><span class="lineno"> 2300</span>            <span class="keyword">public</span> TextureUploadData EmbeddigsData;</div>
<div class="line"><a id="l02301" name="l02301"></a><span class="lineno"> 2301</span>            <span class="keyword">public</span> TextureUploadData SDFGridData;</div>
<div class="line"><a id="l02302" name="l02302"></a><span class="lineno"> 2302</span>        }</div>
<div class="line"><a id="l02303" name="l02303"></a><span class="lineno"> 2303</span> </div>
<div class="line"><a id="l02304" name="l02304"></a><span class="lineno"> 2304</span>        [StructLayout(LayoutKind.Sequential)]</div>
<div class="line"><a id="l02305" name="l02305"></a><span class="lineno"> 2305</span>        <span class="keyword">private</span> <span class="keyword">class </span>SimulationParams</div>
<div class="line"><a id="l02306" name="l02306"></a><span class="lineno"> 2306</span>        {</div>
<div class="line"><a id="l02307" name="l02307"></a><span class="lineno"> 2307</span>            <span class="keyword">public</span> Vector3 GridSize;</div>
<div class="line"><a id="l02308" name="l02308"></a><span class="lineno"> 2308</span>            <span class="keyword">public</span> Int32 NodeCount;</div>
<div class="line"><a id="l02309" name="l02309"></a><span class="lineno"> 2309</span> </div>
<div class="line"><a id="l02310" name="l02310"></a><span class="lineno"> 2310</span>            <span class="keyword">public</span> Vector3 ContainerScale;</div>
<div class="line"><a id="l02311" name="l02311"></a><span class="lineno"> 2311</span>            <span class="keyword">public</span> Single MinimumVelocity;</div>
<div class="line"><a id="l02312" name="l02312"></a><span class="lineno"> 2312</span> </div>
<div class="line"><a id="l02313" name="l02313"></a><span class="lineno"> 2313</span>            <span class="keyword">public</span> Vector3 ContainerPos;</div>
<div class="line"><a id="l02314" name="l02314"></a><span class="lineno"> 2314</span>            <span class="keyword">public</span> Single MaximumVelocity;</div>
<div class="line"><a id="l02315" name="l02315"></a><span class="lineno"> 2315</span> </div>
<div class="line"><a id="l02316" name="l02316"></a><span class="lineno"> 2316</span>            <span class="keyword">public</span> Single TimeStep;</div>
<div class="line"><a id="l02317" name="l02317"></a><span class="lineno"> 2317</span>            <span class="keyword">public</span> Single SimulationTime;</div>
<div class="line"><a id="l02318" name="l02318"></a><span class="lineno"> 2318</span>            <span class="keyword">public</span> Int32 SimulationFrame;</div>
<div class="line"><a id="l02319" name="l02319"></a><span class="lineno"> 2319</span>            <span class="keyword">public</span> Int32 JacobiIterations;</div>
<div class="line"><a id="l02320" name="l02320"></a><span class="lineno"> 2320</span> </div>
<div class="line"><a id="l02321" name="l02321"></a><span class="lineno"> 2321</span>            <span class="keyword">public</span> Single ColorDecay;</div>
<div class="line"><a id="l02322" name="l02322"></a><span class="lineno"> 2322</span>            <span class="keyword">public</span> Single VelocityDecay;</div>
<div class="line"><a id="l02323" name="l02323"></a><span class="lineno"> 2323</span>            <span class="keyword">public</span> Single PressureReuse;</div>
<div class="line"><a id="l02324" name="l02324"></a><span class="lineno"> 2324</span>            <span class="keyword">public</span> Single PressureReuseClamp;</div>
<div class="line"><a id="l02325" name="l02325"></a><span class="lineno"> 2325</span> </div>
<div class="line"><a id="l02326" name="l02326"></a><span class="lineno"> 2326</span>            <span class="keyword">public</span> Single Sharpen;</div>
<div class="line"><a id="l02327" name="l02327"></a><span class="lineno"> 2327</span>            <span class="keyword">public</span> Single SharpenThreshold;</div>
<div class="line"><a id="l02328" name="l02328"></a><span class="lineno"> 2328</span>            <span class="keyword">public</span> Single PressureProjection;</div>
<div class="line"><a id="l02329" name="l02329"></a><span class="lineno"> 2329</span>            <span class="keyword">public</span> Single PressureClamp;</div>
<div class="line"><a id="l02330" name="l02330"></a><span class="lineno"> 2330</span> </div>
<div class="line"><a id="l02331" name="l02331"></a><span class="lineno"> 2331</span>            <span class="keyword">public</span> Vector3 Gravity;</div>
<div class="line"><a id="l02332" name="l02332"></a><span class="lineno"> 2332</span>            <span class="keyword">public</span> Single SmokeBuoyancy;</div>
<div class="line"><a id="l02333" name="l02333"></a><span class="lineno"> 2333</span> </div>
<div class="line"><a id="l02334" name="l02334"></a><span class="lineno"> 2334</span>            <span class="keyword">public</span> Int32 LOD0Iterations;</div>
<div class="line"><a id="l02335" name="l02335"></a><span class="lineno"> 2335</span>            <span class="keyword">public</span> Int32 LOD1Iterations;</div>
<div class="line"><a id="l02336" name="l02336"></a><span class="lineno"> 2336</span>            <span class="keyword">public</span> Int32 LOD2Iterations;</div>
<div class="line"><a id="l02337" name="l02337"></a><span class="lineno"> 2337</span>            <span class="keyword">public</span> Int32 PreIterations;</div>
<div class="line"><a id="l02338" name="l02338"></a><span class="lineno"> 2338</span> </div>
<div class="line"><a id="l02339" name="l02339"></a><span class="lineno"> 2339</span>            <span class="keyword">public</span> Single MainOverrelax;</div>
<div class="line"><a id="l02340" name="l02340"></a><span class="lineno"> 2340</span>            <span class="keyword">public</span> Single EdgeOverrelax;</div>
<div class="line"><a id="l02341" name="l02341"></a><span class="lineno"> 2341</span>            <span class="keyword">public</span> Single VolumeEdgeFadeoff;</div>
<div class="line"><a id="l02342" name="l02342"></a><span class="lineno"> 2342</span>            <span class="keyword">public</span> Int32 SimulationIterations;</div>
<div class="line"><a id="l02343" name="l02343"></a><span class="lineno"> 2343</span> </div>
<div class="line"><a id="l02344" name="l02344"></a><span class="lineno"> 2344</span>            <span class="keyword">public</span> Vector3 SimulationContainerPosition;</div>
<div class="line"><a id="l02345" name="l02345"></a><span class="lineno"> 2345</span>            <span class="keyword">public</span> Int32 SimulationMode;</div>
<div class="line"><a id="l02346" name="l02346"></a><span class="lineno"> 2346</span> </div>
<div class="line"><a id="l02347" name="l02347"></a><span class="lineno"> 2347</span>            <span class="keyword">public</span> Vector3 PreviousContainerPosition;</div>
<div class="line"><a id="l02348" name="l02348"></a><span class="lineno"> 2348</span>            <span class="keyword">public</span> Int32 FixVolumeWorldPosition;</div>
<div class="line"><a id="l02349" name="l02349"></a><span class="lineno"> 2349</span> </div>
<div class="line"><a id="l02350" name="l02350"></a><span class="lineno"> 2350</span>            <span class="keyword">public</span> Single TempThreshold;</div>
<div class="line"><a id="l02351" name="l02351"></a><span class="lineno"> 2351</span>            <span class="keyword">public</span> Single HeatEmission;</div>
<div class="line"><a id="l02352" name="l02352"></a><span class="lineno"> 2352</span>            <span class="keyword">public</span> Single ReactionSpeed;</div>
<div class="line"><a id="l02353" name="l02353"></a><span class="lineno"> 2353</span>            <span class="keyword">public</span> Single HeatBuoyancy;</div>
<div class="line"><a id="l02354" name="l02354"></a><span class="lineno"> 2354</span> </div>
<div class="line"><a id="l02355" name="l02355"></a><span class="lineno"> 2355</span>            <span class="keyword">public</span> Single SmokeDensity;</div>
<div class="line"><a id="l02356" name="l02356"></a><span class="lineno"> 2356</span>            <span class="keyword">public</span> Single FuelDensity;</div>
<div class="line"><a id="l02357" name="l02357"></a><span class="lineno"> 2357</span>            <span class="keyword">public</span> Single TemperatureDensityDependence;</div>
<div class="line"><a id="l02358" name="l02358"></a><span class="lineno"> 2358</span>            <span class="keyword">public</span> Single FireBrightness;</div>
<div class="line"><a id="l02359" name="l02359"></a><span class="lineno"> 2359</span> </div>
<div class="line"><a id="l02360" name="l02360"></a><span class="lineno"> 2360</span>            <span class="keyword">public</span> <span class="keywordtype">int</span> MaxEffectParticleCount;</div>
<div class="line"><a id="l02361" name="l02361"></a><span class="lineno"> 2361</span>            <span class="keyword">public</span> <span class="keywordtype">int</span> ParticleLifetime;</div>
<div class="line"><a id="l02362" name="l02362"></a><span class="lineno"> 2362</span>            <span class="keyword">public</span> <span class="keywordtype">int</span> padding0;</div>
<div class="line"><a id="l02363" name="l02363"></a><span class="lineno"> 2363</span>            <span class="keyword">public</span> <span class="keywordtype">int</span> padding1;</div>
<div class="line"><a id="l02364" name="l02364"></a><span class="lineno"> 2364</span> </div>
<div class="line"><a id="l02365" name="l02365"></a><span class="lineno"> 2365</span>            <span class="keyword">public</span> Vector3 GridSizeLOD;</div>
<div class="line"><a id="l02366" name="l02366"></a><span class="lineno"> 2366</span>            <span class="keyword">public</span> <span class="keywordtype">int</span> GridDownscale;</div>
<div class="line"><a id="l02367" name="l02367"></a><span class="lineno"> 2367</span>        }</div>
<div class="line"><a id="l02368" name="l02368"></a><span class="lineno"> 2368</span> </div>
<div class="line"><a id="l02369" name="l02369"></a><span class="lineno"> 2369</span>        [StructLayout(LayoutKind.Sequential)]</div>
<div class="line"><a id="l02370" name="l02370"></a><span class="lineno"> 2370</span>        <span class="keyword">private</span> <span class="keyword">class </span>RenderParams</div>
<div class="line"><a id="l02371" name="l02371"></a><span class="lineno"> 2371</span>        {</div>
<div class="line"><a id="l02372" name="l02372"></a><span class="lineno"> 2372</span>            <span class="keyword">public</span> Matrix4x4 View;</div>
<div class="line"><a id="l02373" name="l02373"></a><span class="lineno"> 2373</span>            <span class="keyword">public</span> Matrix4x4 Projection;</div>
<div class="line"><a id="l02374" name="l02374"></a><span class="lineno"> 2374</span>            <span class="keyword">public</span> Matrix4x4 ProjectionInverse;</div>
<div class="line"><a id="l02375" name="l02375"></a><span class="lineno"> 2375</span>            <span class="keyword">public</span> Matrix4x4 ViewProjection;</div>
<div class="line"><a id="l02376" name="l02376"></a><span class="lineno"> 2376</span>            <span class="keyword">public</span> Matrix4x4 ViewProjectionInverse;</div>
<div class="line"><a id="l02377" name="l02377"></a><span class="lineno"> 2377</span>            <span class="keyword">public</span> Matrix4x4 EyeRayCameraCoeficients;</div>
<div class="line"><a id="l02378" name="l02378"></a><span class="lineno"> 2378</span>            <span class="keyword">public</span> Vector3 WorldSpaceCameraPos;</div>
<div class="line"><a id="l02379" name="l02379"></a><span class="lineno"> 2379</span>            <span class="keyword">public</span> Int32 CameraID;</div>
<div class="line"><a id="l02380" name="l02380"></a><span class="lineno"> 2380</span>            <span class="keyword">public</span> Vector4 ZBufferParams;</div>
<div class="line"><a id="l02381" name="l02381"></a><span class="lineno"> 2381</span>            <span class="keyword">public</span> Vector2 CameraResolution;</div>
<div class="line"><a id="l02382" name="l02382"></a><span class="lineno"> 2382</span>            <span class="keyword">public</span> Single CameraDownscaleFactor;</div>
<div class="line"><a id="l02383" name="l02383"></a><span class="lineno"> 2383</span>            Single CameraParamsPadding1;</div>
<div class="line"><a id="l02384" name="l02384"></a><span class="lineno"> 2384</span>        }</div>
<div class="line"><a id="l02385" name="l02385"></a><span class="lineno"> 2385</span> </div>
<div class="line"><a id="l02386" name="l02386"></a><span class="lineno"> 2386</span>        <span class="keyword">internal</span> <span class="keyword">struct </span>MaterialPair</div>
<div class="line"><a id="l02387" name="l02387"></a><span class="lineno"> 2387</span>        {</div>
<div class="line"><a id="l02388" name="l02388"></a><span class="lineno"> 2388</span>            <span class="keyword">public</span> Material currentMaterial;</div>
<div class="line"><a id="l02389" name="l02389"></a><span class="lineno"> 2389</span>            <span class="keyword">public</span> Material sharedMaterial;</div>
<div class="line"><a id="l02390" name="l02390"></a><span class="lineno"> 2390</span> </div>
<div class="line"><a id="l02391" name="l02391"></a><span class="lineno"> 2391</span>            <span class="comment">// Returns true if dirty</span></div>
<div class="line"><a id="l02392" name="l02392"></a><span class="lineno"> 2392</span>            <span class="keyword">public</span> <span class="keywordtype">bool</span> SetMaterial(Material mat)</div>
<div class="line"><a id="l02393" name="l02393"></a><span class="lineno"> 2393</span>            {</div>
<div class="line"><a id="l02394" name="l02394"></a><span class="lineno"> 2394</span>                <span class="keywordflow">if</span> (sharedMaterial != mat)</div>
<div class="line"><a id="l02395" name="l02395"></a><span class="lineno"> 2395</span>                {</div>
<div class="line"><a id="l02396" name="l02396"></a><span class="lineno"> 2396</span>                    currentMaterial = (mat != <span class="keyword">null</span> ? Material.Instantiate(mat) : <span class="keyword">null</span>);</div>
<div class="line"><a id="l02397" name="l02397"></a><span class="lineno"> 2397</span>                    sharedMaterial = mat;</div>
<div class="line"><a id="l02398" name="l02398"></a><span class="lineno"> 2398</span>                    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l02399" name="l02399"></a><span class="lineno"> 2399</span>                }</div>
<div class="line"><a id="l02400" name="l02400"></a><span class="lineno"> 2400</span>                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l02401" name="l02401"></a><span class="lineno"> 2401</span>            }</div>
<div class="line"><a id="l02402" name="l02402"></a><span class="lineno"> 2402</span>        }</div>
<div class="line"><a id="l02403" name="l02403"></a><span class="lineno"> 2403</span> </div>
<div class="line"><a id="l02404" name="l02404"></a><span class="lineno"> 2404</span>        <span class="keyword">internal</span> <span class="keyword">class </span>CameraResources</div>
<div class="line"><a id="l02405" name="l02405"></a><span class="lineno"> 2405</span>        {</div>
<div class="line"><a id="l02406" name="l02406"></a><span class="lineno"> 2406</span>            <span class="keyword">public</span> MaterialPair smokeAndFireMaterial;</div>
<div class="line"><a id="l02407" name="l02407"></a><span class="lineno"> 2407</span>            <span class="keyword">public</span> MaterialPair smokeShadowProjectionMaterial;</div>
<div class="line"><a id="l02408" name="l02408"></a><span class="lineno"> 2408</span>            <span class="keyword">public</span> MaterialPair upscaleMaterial;</div>
<div class="line"><a id="l02409" name="l02409"></a><span class="lineno"> 2409</span>            <span class="keyword">public</span> <span class="keywordtype">bool</span> isDirty = <span class="keyword">true</span>;</div>
<div class="line"><a id="l02410" name="l02410"></a><span class="lineno"> 2410</span>        }</div>
<div class="line"><a id="l02411" name="l02411"></a><span class="lineno"> 2411</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l02412" name="l02412"></a><span class="lineno"> 2412</span> </div>
<div class="line"><a id="l02413" name="l02413"></a><span class="lineno"> 2413</span><span class="preprocessor">#region Native utils</span></div>
<div class="line"><a id="l02414" name="l02414"></a><span class="lineno"> 2414</span> </div>
<div class="line"><a id="l02415" name="l02415"></a><span class="lineno"> 2415</span>        <span class="keyword">private</span> IntPtr GetNativePtr(ComputeBuffer buffer)</div>
<div class="line"><a id="l02416" name="l02416"></a><span class="lineno"> 2416</span>        {</div>
<div class="line"><a id="l02417" name="l02417"></a><span class="lineno"> 2417</span>            <span class="keywordflow">return</span> buffer == <span class="keyword">null</span> ? IntPtr.Zero : buffer.GetNativeBufferPtr();</div>
<div class="line"><a id="l02418" name="l02418"></a><span class="lineno"> 2418</span>        }</div>
<div class="line"><a id="l02419" name="l02419"></a><span class="lineno"> 2419</span> </div>
<div class="line"><a id="l02420" name="l02420"></a><span class="lineno"> 2420</span>        <span class="keyword">private</span> IntPtr GetNativePtr(GraphicsBuffer buffer)</div>
<div class="line"><a id="l02421" name="l02421"></a><span class="lineno"> 2421</span>        {</div>
<div class="line"><a id="l02422" name="l02422"></a><span class="lineno"> 2422</span>            <span class="keywordflow">return</span> buffer == <span class="keyword">null</span> ? IntPtr.Zero : buffer.GetNativeBufferPtr();</div>
<div class="line"><a id="l02423" name="l02423"></a><span class="lineno"> 2423</span>        }</div>
<div class="line"><a id="l02424" name="l02424"></a><span class="lineno"> 2424</span> </div>
<div class="line"><a id="l02425" name="l02425"></a><span class="lineno"> 2425</span>        <span class="keyword">private</span> IntPtr GetNativePtr(RenderTexture texture)</div>
<div class="line"><a id="l02426" name="l02426"></a><span class="lineno"> 2426</span>        {</div>
<div class="line"><a id="l02427" name="l02427"></a><span class="lineno"> 2427</span>            <span class="keywordflow">return</span> texture == <span class="keyword">null</span> ? IntPtr.Zero : texture.GetNativeTexturePtr();</div>
<div class="line"><a id="l02428" name="l02428"></a><span class="lineno"> 2428</span>        }</div>
<div class="line"><a id="l02429" name="l02429"></a><span class="lineno"> 2429</span> </div>
<div class="line"><a id="l02430" name="l02430"></a><span class="lineno"> 2430</span>        <span class="keyword">private</span> IntPtr GetNativePtr(Texture2D texture)</div>
<div class="line"><a id="l02431" name="l02431"></a><span class="lineno"> 2431</span>        {</div>
<div class="line"><a id="l02432" name="l02432"></a><span class="lineno"> 2432</span>            <span class="keywordflow">return</span> texture == <span class="keyword">null</span> ? IntPtr.Zero : texture.GetNativeTexturePtr();</div>
<div class="line"><a id="l02433" name="l02433"></a><span class="lineno"> 2433</span>        }</div>
<div class="line"><a id="l02434" name="l02434"></a><span class="lineno"> 2434</span> </div>
<div class="line"><a id="l02435" name="l02435"></a><span class="lineno"> 2435</span>        <span class="keyword">private</span> IntPtr GetNativePtr(Texture3D texture)</div>
<div class="line"><a id="l02436" name="l02436"></a><span class="lineno"> 2436</span>        {</div>
<div class="line"><a id="l02437" name="l02437"></a><span class="lineno"> 2437</span>            <span class="keywordflow">return</span> texture == <span class="keyword">null</span> ? IntPtr.Zero : texture.GetNativeTexturePtr();</div>
<div class="line"><a id="l02438" name="l02438"></a><span class="lineno"> 2438</span>        }</div>
<div class="line"><a id="l02439" name="l02439"></a><span class="lineno"> 2439</span> </div>
<div class="line"><a id="l02440" name="l02440"></a><span class="lineno"> 2440</span>        <span class="keyword">private</span> UnityTextureBridge MakeTextureNativeBridge(RenderTexture texture)</div>
<div class="line"><a id="l02441" name="l02441"></a><span class="lineno"> 2441</span>        {</div>
<div class="line"><a id="l02442" name="l02442"></a><span class="lineno"> 2442</span>            var unityTextureBridge = <span class="keyword">new</span> UnityTextureBridge();</div>
<div class="line"><a id="l02443" name="l02443"></a><span class="lineno"> 2443</span>            <span class="keywordflow">if</span> (texture != <span class="keyword">null</span>)</div>
<div class="line"><a id="l02444" name="l02444"></a><span class="lineno"> 2444</span>            {</div>
<div class="line"><a id="l02445" name="l02445"></a><span class="lineno"> 2445</span>                unityTextureBridge.texture = GetNativePtr(texture);</div>
<div class="line"><a id="l02446" name="l02446"></a><span class="lineno"> 2446</span>                unityTextureBridge.format = SmokeAndFireBridge.ToBridgeTextureFormat(texture.graphicsFormat);</div>
<div class="line"><a id="l02447" name="l02447"></a><span class="lineno"> 2447</span>            }</div>
<div class="line"><a id="l02448" name="l02448"></a><span class="lineno"> 2448</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l02449" name="l02449"></a><span class="lineno"> 2449</span>            {</div>
<div class="line"><a id="l02450" name="l02450"></a><span class="lineno"> 2450</span>                unityTextureBridge.texture = IntPtr.Zero;</div>
<div class="line"><a id="l02451" name="l02451"></a><span class="lineno"> 2451</span>                unityTextureBridge.format = SmokeAndFireBridge.TextureFormat.None;</div>
<div class="line"><a id="l02452" name="l02452"></a><span class="lineno"> 2452</span>            }</div>
<div class="line"><a id="l02453" name="l02453"></a><span class="lineno"> 2453</span> </div>
<div class="line"><a id="l02454" name="l02454"></a><span class="lineno"> 2454</span>            <span class="keywordflow">return</span> unityTextureBridge;</div>
<div class="line"><a id="l02455" name="l02455"></a><span class="lineno"> 2455</span>        }</div>
<div class="line"><a id="l02456" name="l02456"></a><span class="lineno"> 2456</span> </div>
<div class="line"><a id="l02457" name="l02457"></a><span class="lineno"> 2457</span>        <span class="keyword">private</span> UnityTextureBridge MakeTextureNativeBridge(Texture3D texture)</div>
<div class="line"><a id="l02458" name="l02458"></a><span class="lineno"> 2458</span>        {</div>
<div class="line"><a id="l02459" name="l02459"></a><span class="lineno"> 2459</span>            var unityTextureBridge = <span class="keyword">new</span> UnityTextureBridge();</div>
<div class="line"><a id="l02460" name="l02460"></a><span class="lineno"> 2460</span>            unityTextureBridge.texture = GetNativePtr(texture);</div>
<div class="line"><a id="l02461" name="l02461"></a><span class="lineno"> 2461</span>            unityTextureBridge.format = SmokeAndFireBridge.ToBridgeTextureFormat(texture.graphicsFormat);</div>
<div class="line"><a id="l02462" name="l02462"></a><span class="lineno"> 2462</span> </div>
<div class="line"><a id="l02463" name="l02463"></a><span class="lineno"> 2463</span>            <span class="keywordflow">return</span> unityTextureBridge;</div>
<div class="line"><a id="l02464" name="l02464"></a><span class="lineno"> 2464</span>        }</div>
<div class="line"><a id="l02465" name="l02465"></a><span class="lineno"> 2465</span> </div>
<div class="line"><a id="l02466" name="l02466"></a><span class="lineno"> 2466</span>        <span class="keyword">private</span> UnityTextureBridge MakeTextureNativeBridge(Texture2D texture)</div>
<div class="line"><a id="l02467" name="l02467"></a><span class="lineno"> 2467</span>        {</div>
<div class="line"><a id="l02468" name="l02468"></a><span class="lineno"> 2468</span>            var unityTextureBridge = <span class="keyword">new</span> UnityTextureBridge();</div>
<div class="line"><a id="l02469" name="l02469"></a><span class="lineno"> 2469</span>            unityTextureBridge.texture = GetNativePtr(texture);</div>
<div class="line"><a id="l02470" name="l02470"></a><span class="lineno"> 2470</span>            unityTextureBridge.format = SmokeAndFireBridge.ToBridgeTextureFormat(texture.graphicsFormat);</div>
<div class="line"><a id="l02471" name="l02471"></a><span class="lineno"> 2471</span> </div>
<div class="line"><a id="l02472" name="l02472"></a><span class="lineno"> 2472</span>            <span class="keywordflow">return</span> unityTextureBridge;</div>
<div class="line"><a id="l02473" name="l02473"></a><span class="lineno"> 2473</span>        }</div>
<div class="line"><a id="l02474" name="l02474"></a><span class="lineno"> 2474</span> </div>
<div class="line"><a id="l02475" name="l02475"></a><span class="lineno"> 2475</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> SetInteropBuffer&lt;T&gt;(IntPtr NativeBuffer, List&lt;T&gt; list)</div>
<div class="line"><a id="l02476" name="l02476"></a><span class="lineno"> 2476</span>        {</div>
<div class="line"><a id="l02477" name="l02477"></a><span class="lineno"> 2477</span>            <span class="keywordtype">long</span> LongPtr = NativeBuffer.ToInt64(); <span class="comment">// Must work both on x86 and x64</span></div>
<div class="line"><a id="l02478" name="l02478"></a><span class="lineno"> 2478</span>            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> I = 0; I &lt; list.Count; I++)</div>
<div class="line"><a id="l02479" name="l02479"></a><span class="lineno"> 2479</span>            {</div>
<div class="line"><a id="l02480" name="l02480"></a><span class="lineno"> 2480</span>                IntPtr Ptr = <span class="keyword">new</span> IntPtr(LongPtr);</div>
<div class="line"><a id="l02481" name="l02481"></a><span class="lineno"> 2481</span>                Marshal.StructureToPtr(list[I], Ptr, <span class="keyword">true</span>);</div>
<div class="line"><a id="l02482" name="l02482"></a><span class="lineno"> 2482</span>                LongPtr += Marshal.SizeOf(typeof(T));</div>
<div class="line"><a id="l02483" name="l02483"></a><span class="lineno"> 2483</span>            }</div>
<div class="line"><a id="l02484" name="l02484"></a><span class="lineno"> 2484</span>        }</div>
<div class="line"><a id="l02485" name="l02485"></a><span class="lineno"> 2485</span> </div>
<div class="line"><a id="l02486" name="l02486"></a><span class="lineno"> 2486</span>        <span class="keyword">private</span> <span class="keywordtype">bool</span> UpdateNativeTextures(Camera cam, <span class="keywordtype">float</span> renderPipelineRenderScale)</div>
<div class="line"><a id="l02487" name="l02487"></a><span class="lineno"> 2487</span>        {</div>
<div class="line"><a id="l02488" name="l02488"></a><span class="lineno"> 2488</span>            RefreshEmitterColorsTexture();</div>
<div class="line"><a id="l02489" name="l02489"></a><span class="lineno"> 2489</span>            UpdateCameraList();</div>
<div class="line"><a id="l02490" name="l02490"></a><span class="lineno"> 2490</span> </div>
<div class="line"><a id="l02491" name="l02491"></a><span class="lineno"> 2491</span>            Vector2Int cameraResolution = <span class="keyword">new</span> Vector2Int(cam.pixelWidth, cam.pixelHeight);</div>
<div class="line"><a id="l02492" name="l02492"></a><span class="lineno"> 2492</span>            cameraResolution = ApplyRenderPipelineRenderScale(cameraResolution, renderPipelineRenderScale);</div>
<div class="line"><a id="l02493" name="l02493"></a><span class="lineno"> 2493</span> </div>
<div class="line"><a id="l02494" name="l02494"></a><span class="lineno"> 2494</span>            Vector2Int textureResolution = GetRequiredTextureResolution();</div>
<div class="line"><a id="l02495" name="l02495"></a><span class="lineno"> 2495</span>            <span class="keywordtype">int</span> pixelCount = textureResolution.x * textureResolution.y;</div>
<div class="line"><a id="l02496" name="l02496"></a><span class="lineno"> 2496</span> </div>
<div class="line"><a id="l02497" name="l02497"></a><span class="lineno"> 2497</span>            <span class="keywordflow">if</span> (!cameras.Contains(cam))</div>
<div class="line"><a id="l02498" name="l02498"></a><span class="lineno"> 2498</span>            {</div>
<div class="line"><a id="l02499" name="l02499"></a><span class="lineno"> 2499</span>                <span class="comment">// add camera to list</span></div>
<div class="line"><a id="l02500" name="l02500"></a><span class="lineno"> 2500</span>                cameras.Add(cam);</div>
<div class="line"><a id="l02501" name="l02501"></a><span class="lineno"> 2501</span>            }</div>
<div class="line"><a id="l02502" name="l02502"></a><span class="lineno"> 2502</span> </div>
<div class="line"><a id="l02503" name="l02503"></a><span class="lineno"> 2503</span>            <span class="keywordtype">int</span> CameraID = cameras.IndexOf(cam);</div>
<div class="line"><a id="l02504" name="l02504"></a><span class="lineno"> 2504</span> </div>
<div class="line"><a id="l02505" name="l02505"></a><span class="lineno"> 2505</span>            <span class="keywordtype">bool</span> isGlobalTexturesDirty = <span class="keyword">false</span>;</div>
<div class="line"><a id="l02506" name="l02506"></a><span class="lineno"> 2506</span>            <span class="keywordtype">bool</span> isCameraDirty = cameraResources[cam].isDirty;</div>
<div class="line"><a id="l02507" name="l02507"></a><span class="lineno"> 2507</span> </div>
<div class="line"><a id="l02508" name="l02508"></a><span class="lineno"> 2508</span>            FilterMode defaultFilter = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">EnableDownscale</a> ? FilterMode.Bilinear : FilterMode.Point;</div>
<div class="line"><a id="l02509" name="l02509"></a><span class="lineno"> 2509</span> </div>
<div class="line"><a id="l02510" name="l02510"></a><span class="lineno"> 2510</span>            <span class="keywordtype">bool</span> updationFlag = <span class="keyword">false</span>;</div>
<div class="line"><a id="l02511" name="l02511"></a><span class="lineno"> 2511</span>            UpscaleColor = CreateTexture(UpscaleColor, textureResolution, <span class="keyword">true</span>, FilterMode.Bilinear, 0,</div>
<div class="line"><a id="l02512" name="l02512"></a><span class="lineno"> 2512</span>                                         RenderTextureFormat.ARGBHalf, <span class="keyword">true</span>, ref updationFlag);</div>
<div class="line"><a id="l02513" name="l02513"></a><span class="lineno"> 2513</span>            ParticlesRT = CreateTexture(ParticlesRT, textureResolution, <span class="keyword">true</span>, FilterMode.Point, 0,</div>
<div class="line"><a id="l02514" name="l02514"></a><span class="lineno"> 2514</span>                                        RenderTextureFormat.ARGB32, <span class="keyword">true</span>, ref updationFlag);</div>
<div class="line"><a id="l02515" name="l02515"></a><span class="lineno"> 2515</span>            DepthTexture = CreateTexture(DepthTexture, cameraResolution, <span class="keyword">true</span>, defaultFilter, 32,</div>
<div class="line"><a id="l02516" name="l02516"></a><span class="lineno"> 2516</span>                                         RenderTextureFormat.RFloat, <span class="keyword">true</span>, ref updationFlag);</div>
<div class="line"><a id="l02517" name="l02517"></a><span class="lineno"> 2517</span>            isGlobalTexturesDirty = updationFlag || isGlobalTexturesDirty;</div>
<div class="line"><a id="l02518" name="l02518"></a><span class="lineno"> 2518</span> </div>
<div class="line"><a id="l02519" name="l02519"></a><span class="lineno"> 2519</span>            <span class="keywordflow">if</span> (isGlobalTexturesDirty || isCameraDirty || forceTextureUpdate)</div>
<div class="line"><a id="l02520" name="l02520"></a><span class="lineno"> 2520</span>            {</div>
<div class="line"><a id="l02521" name="l02521"></a><span class="lineno"> 2521</span>                <span class="keywordflow">if</span> (isGlobalTexturesDirty || forceTextureUpdate)</div>
<div class="line"><a id="l02522" name="l02522"></a><span class="lineno"> 2522</span>                {</div>
<div class="line"><a id="l02523" name="l02523"></a><span class="lineno"> 2523</span>                    <span class="keywordflow">foreach</span> (var camera <span class="keywordflow">in</span> cameraResources)</div>
<div class="line"><a id="l02524" name="l02524"></a><span class="lineno"> 2524</span>                    {</div>
<div class="line"><a id="l02525" name="l02525"></a><span class="lineno"> 2525</span>                        camera.Value.isDirty = <span class="keyword">true</span>;</div>
<div class="line"><a id="l02526" name="l02526"></a><span class="lineno"> 2526</span>                    }</div>
<div class="line"><a id="l02527" name="l02527"></a><span class="lineno"> 2527</span> </div>
<div class="line"><a id="l02528" name="l02528"></a><span class="lineno"> 2528</span>                    CurrentTextureResolution = textureResolution;</div>
<div class="line"><a id="l02529" name="l02529"></a><span class="lineno"> 2529</span>                }</div>
<div class="line"><a id="l02530" name="l02530"></a><span class="lineno"> 2530</span> </div>
<div class="line"><a id="l02531" name="l02531"></a><span class="lineno"> 2531</span>                cameraResources[cam].isDirty = <span class="keyword">false</span>;</div>
<div class="line"><a id="l02532" name="l02532"></a><span class="lineno"> 2532</span> </div>
<div class="line"><a id="l02533" name="l02533"></a><span class="lineno"> 2533</span>                var registerRenderResourcesBridgeParams = <span class="keyword">new</span> RegisterRenderResourcesBridgeParams();</div>
<div class="line"><a id="l02534" name="l02534"></a><span class="lineno"> 2534</span>                registerRenderResourcesBridgeParams.ParticleColors = MakeTextureNativeBridge(EmittersColorsTexture);</div>
<div class="line"><a id="l02535" name="l02535"></a><span class="lineno"> 2535</span>                registerRenderResourcesBridgeParams.ParticleSprites = MakeTextureNativeBridge(EmittersSpriteTexture);</div>
<div class="line"><a id="l02536" name="l02536"></a><span class="lineno"> 2536</span>                registerRenderResourcesBridgeParams.Depth = MakeTextureNativeBridge(DepthTexture);</div>
<div class="line"><a id="l02537" name="l02537"></a><span class="lineno"> 2537</span>                registerRenderResourcesBridgeParams.ParticlesRT = MakeTextureNativeBridge(ParticlesRT);</div>
<div class="line"><a id="l02538" name="l02538"></a><span class="lineno"> 2538</span> </div>
<div class="line"><a id="l02539" name="l02539"></a><span class="lineno"> 2539</span>                IntPtr nativeRegisterRenderResourcesBridgeParams =</div>
<div class="line"><a id="l02540" name="l02540"></a><span class="lineno"> 2540</span>                    Marshal.AllocHGlobal(Marshal.SizeOf(registerRenderResourcesBridgeParams));</div>
<div class="line"><a id="l02541" name="l02541"></a><span class="lineno"> 2541</span>                Marshal.StructureToPtr(registerRenderResourcesBridgeParams, nativeRegisterRenderResourcesBridgeParams,</div>
<div class="line"><a id="l02542" name="l02542"></a><span class="lineno"> 2542</span>                                       <span class="keyword">true</span>);</div>
<div class="line"><a id="l02543" name="l02543"></a><span class="lineno"> 2543</span>                solverCommandBuffer.Clear();</div>
<div class="line"><a id="l02544" name="l02544"></a><span class="lineno"> 2544</span>                SmokeAndFireBridge.SubmitInstanceEvent(solverCommandBuffer, CurrentInstanceID,</div>
<div class="line"><a id="l02545" name="l02545"></a><span class="lineno"> 2545</span>                                                       SmokeAndFireBridge.EventID.RegisterRenderResources,</div>
<div class="line"><a id="l02546" name="l02546"></a><span class="lineno"> 2546</span>                                                       nativeRegisterRenderResourcesBridgeParams);</div>
<div class="line"><a id="l02547" name="l02547"></a><span class="lineno"> 2547</span>                Graphics.ExecuteCommandBuffer(solverCommandBuffer);</div>
<div class="line"><a id="l02548" name="l02548"></a><span class="lineno"> 2548</span> </div>
<div class="line"><a id="l02549" name="l02549"></a><span class="lineno"> 2549</span>                toFreeOnExit.Add(nativeRegisterRenderResourcesBridgeParams);</div>
<div class="line"><a id="l02550" name="l02550"></a><span class="lineno"> 2550</span>                forceTextureUpdate = <span class="keyword">false</span>;</div>
<div class="line"><a id="l02551" name="l02551"></a><span class="lineno"> 2551</span>            }</div>
<div class="line"><a id="l02552" name="l02552"></a><span class="lineno"> 2552</span> </div>
<div class="line"><a id="l02553" name="l02553"></a><span class="lineno"> 2553</span>            <span class="keywordflow">return</span> isGlobalTexturesDirty || isCameraDirty;</div>
<div class="line"><a id="l02554" name="l02554"></a><span class="lineno"> 2554</span>        }</div>
<div class="line"><a id="l02555" name="l02555"></a><span class="lineno"> 2555</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l02556" name="l02556"></a><span class="lineno"> 2556</span> </div>
<div class="line"><a id="l02557" name="l02557"></a><span class="lineno"> 2557</span><span class="preprocessor">#region MonoBehaviour interface</span></div>
<div class="line"><a id="l02558" name="l02558"></a><span class="lineno"> 2558</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> OnEnable()</div>
<div class="line"><a id="l02559" name="l02559"></a><span class="lineno"> 2559</span>        {</div>
<div class="line"><a id="l02560" name="l02560"></a><span class="lineno"> 2560</span>            SetupScriptableRenderComponents();</div>
<div class="line"><a id="l02561" name="l02561"></a><span class="lineno"> 2561</span> </div>
<div class="line"><a id="l02562" name="l02562"></a><span class="lineno"> 2562</span>            <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ae6f6139d03c6cb1987d13cac50d24523">AllInstances</a>?.Add(<span class="keyword">this</span>);</div>
<div class="line"><a id="l02563" name="l02563"></a><span class="lineno"> 2563</span> </div>
<div class="line"><a id="l02564" name="l02564"></a><span class="lineno"> 2564</span><span class="preprocessor">#if UNITY_EDITOR</span></div>
<div class="line"><a id="l02565" name="l02565"></a><span class="lineno"> 2565</span>            <span class="keywordflow">if</span> (!UnityEditor.EditorApplication.isPlaying)</div>
<div class="line"><a id="l02566" name="l02566"></a><span class="lineno"> 2566</span>            {</div>
<div class="line"><a id="l02567" name="l02567"></a><span class="lineno"> 2567</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l02568" name="l02568"></a><span class="lineno"> 2568</span>            }</div>
<div class="line"><a id="l02569" name="l02569"></a><span class="lineno"> 2569</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l02570" name="l02570"></a><span class="lineno"> 2570</span> </div>
<div class="line"><a id="l02571" name="l02571"></a><span class="lineno"> 2571</span>            Init();</div>
<div class="line"><a id="l02572" name="l02572"></a><span class="lineno"> 2572</span>        }</div>
<div class="line"><a id="l02573" name="l02573"></a><span class="lineno"> 2573</span> </div>
<div class="line"><a id="l02574" name="l02574"></a><span class="lineno"> 2574</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> Start()</div>
<div class="line"><a id="l02575" name="l02575"></a><span class="lineno"> 2575</span>        {</div>
<div class="line"><a id="l02576" name="l02576"></a><span class="lineno"> 2576</span>            Application.targetFrameRate = 512;</div>
<div class="line"><a id="l02577" name="l02577"></a><span class="lineno"> 2577</span>            <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a> = gameObject.GetComponent&lt;<a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html">ZibraSmokeAndFireMaterialParameters</a>&gt;();</div>
<div class="line"><a id="l02578" name="l02578"></a><span class="lineno"> 2578</span>            <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">solverParameters</a> = gameObject.GetComponent&lt;<a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html">ZibraSmokeAndFireSolverParameters</a>&gt;();</div>
<div class="line"><a id="l02579" name="l02579"></a><span class="lineno"> 2579</span>            ManipulatorManager = gameObject.GetComponent&lt;ZibraManipulatorManager&gt;();</div>
<div class="line"><a id="l02580" name="l02580"></a><span class="lineno"> 2580</span>        }</div>
<div class="line"><a id="l02581" name="l02581"></a><span class="lineno"> 2581</span> </div>
<div class="line"><a id="l02582" name="l02582"></a><span class="lineno"> 2582</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> Update()</div>
<div class="line"><a id="l02583" name="l02583"></a><span class="lineno"> 2583</span>        {</div>
<div class="line"><a id="l02584" name="l02584"></a><span class="lineno"> 2584</span>            <span class="keywordflow">if</span> (!<a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">Initialized</a>)</div>
<div class="line"><a id="l02585" name="l02585"></a><span class="lineno"> 2585</span>            {</div>
<div class="line"><a id="l02586" name="l02586"></a><span class="lineno"> 2586</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l02587" name="l02587"></a><span class="lineno"> 2587</span>            }</div>
<div class="line"><a id="l02588" name="l02588"></a><span class="lineno"> 2588</span> </div>
<div class="line"><a id="l02589" name="l02589"></a><span class="lineno"> 2589</span>            ZibraSmokeAndFireGPUGarbageCollector.GCUpdateWrapper();</div>
<div class="line"><a id="l02590" name="l02590"></a><span class="lineno"> 2590</span> </div>
<div class="line"><a id="l02591" name="l02591"></a><span class="lineno"> 2591</span><span class="preprocessor">#if UNITY_EDITOR</span></div>
<div class="line"><a id="l02592" name="l02592"></a><span class="lineno"> 2592</span>            <span class="keywordflow">if</span> (!UnityEditor.EditorApplication.isPlaying)</div>
<div class="line"><a id="l02593" name="l02593"></a><span class="lineno"> 2593</span>            {</div>
<div class="line"><a id="l02594" name="l02594"></a><span class="lineno"> 2594</span>                <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l02595" name="l02595"></a><span class="lineno"> 2595</span>            }</div>
<div class="line"><a id="l02596" name="l02596"></a><span class="lineno"> 2596</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l02597" name="l02597"></a><span class="lineno"> 2597</span> </div>
<div class="line"><a id="l02598" name="l02598"></a><span class="lineno"> 2598</span>            <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#afcac8381e4e2985d8950aa58684e852a">LimitFramerate</a>)</div>
<div class="line"><a id="l02599" name="l02599"></a><span class="lineno"> 2599</span>            {</div>
<div class="line"><a id="l02600" name="l02600"></a><span class="lineno"> 2600</span>                <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ad2ec1cd6873831fe75a9de4b2f6416cd">MaximumFramerate</a> &gt; 0.0f)</div>
<div class="line"><a id="l02601" name="l02601"></a><span class="lineno"> 2601</span>                {</div>
<div class="line"><a id="l02602" name="l02602"></a><span class="lineno"> 2602</span>                    timeAccumulation += Time.deltaTime;</div>
<div class="line"><a id="l02603" name="l02603"></a><span class="lineno"> 2603</span> </div>
<div class="line"><a id="l02604" name="l02604"></a><span class="lineno"> 2604</span>                    <span class="keywordflow">if</span> (timeAccumulation &gt; 1.0f / <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ad2ec1cd6873831fe75a9de4b2f6416cd">MaximumFramerate</a>)</div>
<div class="line"><a id="l02605" name="l02605"></a><span class="lineno"> 2605</span>                    {</div>
<div class="line"><a id="l02606" name="l02606"></a><span class="lineno"> 2606</span>                        UpdateSimulation();</div>
<div class="line"><a id="l02607" name="l02607"></a><span class="lineno"> 2607</span>                        timeAccumulation = 0;</div>
<div class="line"><a id="l02608" name="l02608"></a><span class="lineno"> 2608</span>                    }</div>
<div class="line"><a id="l02609" name="l02609"></a><span class="lineno"> 2609</span>                }</div>
<div class="line"><a id="l02610" name="l02610"></a><span class="lineno"> 2610</span>            }</div>
<div class="line"><a id="l02611" name="l02611"></a><span class="lineno"> 2611</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l02612" name="l02612"></a><span class="lineno"> 2612</span>            {</div>
<div class="line"><a id="l02613" name="l02613"></a><span class="lineno"> 2613</span>                UpdateSimulation();</div>
<div class="line"><a id="l02614" name="l02614"></a><span class="lineno"> 2614</span>            }</div>
<div class="line"><a id="l02615" name="l02615"></a><span class="lineno"> 2615</span> </div>
<div class="line"><a id="l02616" name="l02616"></a><span class="lineno"> 2616</span>            UpdateReadback();</div>
<div class="line"><a id="l02617" name="l02617"></a><span class="lineno"> 2617</span>            RefreshEmitterColorsTexture();</div>
<div class="line"><a id="l02618" name="l02618"></a><span class="lineno"> 2618</span><span class="preprocessor">#if ZIBRA_EFFECTS_DEBUG</span></div>
<div class="line"><a id="l02619" name="l02619"></a><span class="lineno"> 2619</span>            <span class="keywordflow">if</span> (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Vulkan)</div>
<div class="line"><a id="l02620" name="l02620"></a><span class="lineno"> 2620</span>            {</div>
<div class="line"><a id="l02621" name="l02621"></a><span class="lineno"> 2621</span>                UpdateDebugTimestamps();</div>
<div class="line"><a id="l02622" name="l02622"></a><span class="lineno"> 2622</span>            }</div>
<div class="line"><a id="l02623" name="l02623"></a><span class="lineno"> 2623</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l02624" name="l02624"></a><span class="lineno"> 2624</span>        }</div>
<div class="line"><a id="l02625" name="l02625"></a><span class="lineno"> 2625</span> </div>
<div class="line"><a id="l02626" name="l02626"></a><span class="lineno"> 2626</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> OnApplicationQuit()</div>
<div class="line"><a id="l02627" name="l02627"></a><span class="lineno"> 2627</span>        {</div>
<div class="line"><a id="l02628" name="l02628"></a><span class="lineno"> 2628</span>            OnDisable();</div>
<div class="line"><a id="l02629" name="l02629"></a><span class="lineno"> 2629</span>        }</div>
<div class="line"><a id="l02630" name="l02630"></a><span class="lineno"> 2630</span> </div>
<div class="line"><a id="l02631" name="l02631"></a><span class="lineno"> 2631</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> OnDisable()</div>
<div class="line"><a id="l02632" name="l02632"></a><span class="lineno"> 2632</span>        {</div>
<div class="line"><a id="l02633" name="l02633"></a><span class="lineno"> 2633</span>            <a class="code hl_function" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a03f1d1aa875dc4704958831ef7eaea9d">StopSolver</a>();</div>
<div class="line"><a id="l02634" name="l02634"></a><span class="lineno"> 2634</span>        }</div>
<div class="line"><a id="l02635" name="l02635"></a><span class="lineno"> 2635</span> </div>
<div class="line"><a id="l02636" name="l02636"></a><span class="lineno"> 2636</span><span class="preprocessor">#if UNITY_EDITOR</span></div>
<div class="line"><a id="l02637" name="l02637"></a><span class="lineno"> 2637</span>        <span class="keyword">internal</span> <span class="keywordtype">void</span> OnValidate()</div>
<div class="line"><a id="l02638" name="l02638"></a><span class="lineno"> 2638</span>        {</div>
<div class="line"><a id="l02639" name="l02639"></a><span class="lineno"> 2639</span>            transform.rotation = Quaternion.identity;</div>
<div class="line"><a id="l02640" name="l02640"></a><span class="lineno"> 2640</span>            transform.localScale = Vector3.one;</div>
<div class="line"><a id="l02641" name="l02641"></a><span class="lineno"> 2641</span> </div>
<div class="line"><a id="l02642" name="l02642"></a><span class="lineno"> 2642</span>            <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>[0] = Math.Max(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>[0], 1e-3f);</div>
<div class="line"><a id="l02643" name="l02643"></a><span class="lineno"> 2643</span>            <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>[1] = Math.Max(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>[1], 1e-3f);</div>
<div class="line"><a id="l02644" name="l02644"></a><span class="lineno"> 2644</span>            <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>[2] = Math.Max(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>[2], 1e-3f);</div>
<div class="line"><a id="l02645" name="l02645"></a><span class="lineno"> 2645</span> </div>
<div class="line"><a id="l02646" name="l02646"></a><span class="lineno"> 2646</span>            <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0a35bae3070e845517bfcfb64688f2ca">CellSize</a> = Math.Max(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>.x, Math.Max(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>.y, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>.z)) / <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a5471ff6648f72a9e172b87554fd6c1b3">GridResolution</a>;</div>
<div class="line"><a id="l02647" name="l02647"></a><span class="lineno"> 2647</span> </div>
<div class="line"><a id="l02648" name="l02648"></a><span class="lineno"> 2648</span>            <span class="keywordflow">if</span> (GetComponent&lt;ZibraSmokeAndFireMaterialParameters&gt;() == <span class="keyword">null</span>)</div>
<div class="line"><a id="l02649" name="l02649"></a><span class="lineno"> 2649</span>            {</div>
<div class="line"><a id="l02650" name="l02650"></a><span class="lineno"> 2650</span>                gameObject.AddComponent&lt;<a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html">ZibraSmokeAndFireMaterialParameters</a>&gt;();</div>
<div class="line"><a id="l02651" name="l02651"></a><span class="lineno"> 2651</span>                UnityEditor.EditorUtility.SetDirty(<span class="keyword">this</span>);</div>
<div class="line"><a id="l02652" name="l02652"></a><span class="lineno"> 2652</span>            }</div>
<div class="line"><a id="l02653" name="l02653"></a><span class="lineno"> 2653</span> </div>
<div class="line"><a id="l02654" name="l02654"></a><span class="lineno"> 2654</span>            <span class="keywordflow">if</span> (GetComponent&lt;ZibraSmokeAndFireSolverParameters&gt;() == <span class="keyword">null</span>)</div>
<div class="line"><a id="l02655" name="l02655"></a><span class="lineno"> 2655</span>            {</div>
<div class="line"><a id="l02656" name="l02656"></a><span class="lineno"> 2656</span>                gameObject.AddComponent&lt;<a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html">ZibraSmokeAndFireSolverParameters</a>&gt;();</div>
<div class="line"><a id="l02657" name="l02657"></a><span class="lineno"> 2657</span>                UnityEditor.EditorUtility.SetDirty(<span class="keyword">this</span>);</div>
<div class="line"><a id="l02658" name="l02658"></a><span class="lineno"> 2658</span>            }</div>
<div class="line"><a id="l02659" name="l02659"></a><span class="lineno"> 2659</span> </div>
<div class="line"><a id="l02660" name="l02660"></a><span class="lineno"> 2660</span>            <span class="keywordflow">if</span> (GetComponent&lt;ZibraManipulatorManager&gt;() == <span class="keyword">null</span>)</div>
<div class="line"><a id="l02661" name="l02661"></a><span class="lineno"> 2661</span>            {</div>
<div class="line"><a id="l02662" name="l02662"></a><span class="lineno"> 2662</span>                gameObject.AddComponent&lt;ZibraManipulatorManager&gt;();</div>
<div class="line"><a id="l02663" name="l02663"></a><span class="lineno"> 2663</span>                UnityEditor.EditorUtility.SetDirty(<span class="keyword">this</span>);</div>
<div class="line"><a id="l02664" name="l02664"></a><span class="lineno"> 2664</span>            }</div>
<div class="line"><a id="l02665" name="l02665"></a><span class="lineno"> 2665</span> </div>
<div class="line"><a id="l02666" name="l02666"></a><span class="lineno"> 2666</span>            ValidateManipulators();</div>
<div class="line"><a id="l02667" name="l02667"></a><span class="lineno"> 2667</span>        }</div>
<div class="line"><a id="l02668" name="l02668"></a><span class="lineno"> 2668</span> </div>
<div class="line"><a id="l02669" name="l02669"></a><span class="lineno"> 2669</span>        <span class="keywordtype">void</span> OnDrawGizmosInternal(<span class="keywordtype">bool</span> isSelected)</div>
<div class="line"><a id="l02670" name="l02670"></a><span class="lineno"> 2670</span>        {</div>
<div class="line"><a id="l02671" name="l02671"></a><span class="lineno"> 2671</span>            Gizmos.color = Color.yellow;</div>
<div class="line"><a id="l02672" name="l02672"></a><span class="lineno"> 2672</span>            <span class="keywordflow">if</span> (!isSelected)</div>
<div class="line"><a id="l02673" name="l02673"></a><span class="lineno"> 2673</span>            {</div>
<div class="line"><a id="l02674" name="l02674"></a><span class="lineno"> 2674</span>                Gizmos.color = <span class="keyword">new</span> Color(Gizmos.color.r, Gizmos.color.g, Gizmos.color.b, Gizmos.color.a * 0.5f);</div>
<div class="line"><a id="l02675" name="l02675"></a><span class="lineno"> 2675</span>            }</div>
<div class="line"><a id="l02676" name="l02676"></a><span class="lineno"> 2676</span>            Gizmos.DrawWireCube(transform.position, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>);</div>
<div class="line"><a id="l02677" name="l02677"></a><span class="lineno"> 2677</span> </div>
<div class="line"><a id="l02678" name="l02678"></a><span class="lineno"> 2678</span>            Gizmos.color = Color.cyan;</div>
<div class="line"><a id="l02679" name="l02679"></a><span class="lineno"> 2679</span>            <span class="keywordflow">if</span> (!isSelected)</div>
<div class="line"><a id="l02680" name="l02680"></a><span class="lineno"> 2680</span>            {</div>
<div class="line"><a id="l02681" name="l02681"></a><span class="lineno"> 2681</span>                Gizmos.color = <span class="keyword">new</span> Color(Gizmos.color.r, Gizmos.color.g, Gizmos.color.b, Gizmos.color.a * 0.5f);</div>
<div class="line"><a id="l02682" name="l02682"></a><span class="lineno"> 2682</span>            }</div>
<div class="line"><a id="l02683" name="l02683"></a><span class="lineno"> 2683</span> </div>
<div class="line"><a id="l02684" name="l02684"></a><span class="lineno"> 2684</span>            Vector3 voxelSize =</div>
<div class="line"><a id="l02685" name="l02685"></a><span class="lineno"> 2685</span>                <span class="keyword">new</span> Vector3(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>.x / <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>.x, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>.y / <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>.y, <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">ContainerSize</a>.z / <a class="code hl_property" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">GridSize</a>.z);</div>
<div class="line"><a id="l02686" name="l02686"></a><span class="lineno"> 2686</span>            <span class="keyword">const</span> <span class="keywordtype">int</span> GizmosVoxelCubeSize = 2;</div>
<div class="line"><a id="l02687" name="l02687"></a><span class="lineno"> 2687</span>            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = -GizmosVoxelCubeSize; i &lt;= GizmosVoxelCubeSize; i++)</div>
<div class="line"><a id="l02688" name="l02688"></a><span class="lineno"> 2688</span>                <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = -GizmosVoxelCubeSize; j &lt;= GizmosVoxelCubeSize; j++)</div>
<div class="line"><a id="l02689" name="l02689"></a><span class="lineno"> 2689</span>                    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = -GizmosVoxelCubeSize; k &lt;= GizmosVoxelCubeSize; k++)</div>
<div class="line"><a id="l02690" name="l02690"></a><span class="lineno"> 2690</span>                        Gizmos.DrawWireCube(transform.position +</div>
<div class="line"><a id="l02691" name="l02691"></a><span class="lineno"> 2691</span>                                                <span class="keyword">new</span> Vector3(i * voxelSize.x, j * voxelSize.y, k * voxelSize.z),</div>
<div class="line"><a id="l02692" name="l02692"></a><span class="lineno"> 2692</span>                                            voxelSize);</div>
<div class="line"><a id="l02693" name="l02693"></a><span class="lineno"> 2693</span>        }</div>
<div class="line"><a id="l02694" name="l02694"></a><span class="lineno"> 2694</span> </div>
<div class="line"><a id="l02695" name="l02695"></a><span class="lineno"> 2695</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> OnDrawGizmosSelected()</div>
<div class="line"><a id="l02696" name="l02696"></a><span class="lineno"> 2696</span>        {</div>
<div class="line"><a id="l02697" name="l02697"></a><span class="lineno"> 2697</span>            OnDrawGizmosInternal(<span class="keyword">true</span>);</div>
<div class="line"><a id="l02698" name="l02698"></a><span class="lineno"> 2698</span>        }</div>
<div class="line"><a id="l02699" name="l02699"></a><span class="lineno"> 2699</span> </div>
<div class="line"><a id="l02700" name="l02700"></a><span class="lineno"> 2700</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> OnDrawGizmos()</div>
<div class="line"><a id="l02701" name="l02701"></a><span class="lineno"> 2701</span>        {</div>
<div class="line"><a id="l02702" name="l02702"></a><span class="lineno"> 2702</span>            OnDrawGizmosInternal(<span class="keyword">false</span>);</div>
<div class="line"><a id="l02703" name="l02703"></a><span class="lineno"> 2703</span>        }</div>
<div class="line"><a id="l02704" name="l02704"></a><span class="lineno"> 2704</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l02705" name="l02705"></a><span class="lineno"> 2705</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l02706" name="l02706"></a><span class="lineno"> 2706</span> </div>
<div class="line"><a id="l02707" name="l02707"></a><span class="lineno"> 2707</span><span class="preprocessor">#region Misc</span></div>
<div class="line"><a id="l02708" name="l02708"></a><span class="lineno"> 2708</span>        <span class="keyword">private</span> Vector2Int GetRequiredTextureResolution()</div>
<div class="line"><a id="l02709" name="l02709"></a><span class="lineno"> 2709</span>        {</div>
<div class="line"><a id="l02710" name="l02710"></a><span class="lineno"> 2710</span>            <span class="keywordflow">if</span> (camRenderResolutions.Count == 0)</div>
<div class="line"><a id="l02711" name="l02711"></a><span class="lineno"> 2711</span>                Debug.Log(<span class="stringliteral">&quot;camRenderResolutions dictionary was empty when GetRequiredTextureResolution was called.&quot;</span>);</div>
<div class="line"><a id="l02712" name="l02712"></a><span class="lineno"> 2712</span> </div>
<div class="line"><a id="l02713" name="l02713"></a><span class="lineno"> 2713</span>            Vector2Int result = <span class="keyword">new</span> Vector2Int(0, 0);</div>
<div class="line"><a id="l02714" name="l02714"></a><span class="lineno"> 2714</span>            <span class="keywordflow">foreach</span> (var item <span class="keywordflow">in</span> camRenderResolutions)</div>
<div class="line"><a id="l02715" name="l02715"></a><span class="lineno"> 2715</span>            {</div>
<div class="line"><a id="l02716" name="l02716"></a><span class="lineno"> 2716</span>                result = Vector2Int.Max(result, item.Value);</div>
<div class="line"><a id="l02717" name="l02717"></a><span class="lineno"> 2717</span>            }</div>
<div class="line"><a id="l02718" name="l02718"></a><span class="lineno"> 2718</span> </div>
<div class="line"><a id="l02719" name="l02719"></a><span class="lineno"> 2719</span>            <span class="keywordflow">return</span> result;</div>
<div class="line"><a id="l02720" name="l02720"></a><span class="lineno"> 2720</span>        }</div>
<div class="line"><a id="l02721" name="l02721"></a><span class="lineno"> 2721</span> </div>
<div class="line"><a id="l02722" name="l02722"></a><span class="lineno"> 2722</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> UpdateCameraList()</div>
<div class="line"><a id="l02723" name="l02723"></a><span class="lineno"> 2723</span>        {</div>
<div class="line"><a id="l02724" name="l02724"></a><span class="lineno"> 2724</span>            List&lt;Camera&gt; toRemove = <span class="keyword">new</span> List&lt;Camera&gt;();</div>
<div class="line"><a id="l02725" name="l02725"></a><span class="lineno"> 2725</span>            <span class="keywordflow">foreach</span> (var camResource <span class="keywordflow">in</span> cameraResources)</div>
<div class="line"><a id="l02726" name="l02726"></a><span class="lineno"> 2726</span>            {</div>
<div class="line"><a id="l02727" name="l02727"></a><span class="lineno"> 2727</span>                <span class="keywordflow">if</span> (camResource.Key == <span class="keyword">null</span> ||</div>
<div class="line"><a id="l02728" name="l02728"></a><span class="lineno"> 2728</span>                    (!camResource.Key.isActiveAndEnabled &amp;&amp; camResource.Key.cameraType != CameraType.SceneView))</div>
<div class="line"><a id="l02729" name="l02729"></a><span class="lineno"> 2729</span>                {</div>
<div class="line"><a id="l02730" name="l02730"></a><span class="lineno"> 2730</span>                    toRemove.Add(camResource.Key);</div>
<div class="line"><a id="l02731" name="l02731"></a><span class="lineno"> 2731</span>                    <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l02732" name="l02732"></a><span class="lineno"> 2732</span>                }</div>
<div class="line"><a id="l02733" name="l02733"></a><span class="lineno"> 2733</span>            }</div>
<div class="line"><a id="l02734" name="l02734"></a><span class="lineno"> 2734</span>        }</div>
<div class="line"><a id="l02735" name="l02735"></a><span class="lineno"> 2735</span> </div>
<div class="line"><a id="l02736" name="l02736"></a><span class="lineno"> 2736</span>        <span class="keyword">private</span> Vector3Int LODGridSize(Vector3Int size, <span class="keywordtype">int</span> downscale)</div>
<div class="line"><a id="l02737" name="l02737"></a><span class="lineno"> 2737</span>        {</div>
<div class="line"><a id="l02738" name="l02738"></a><span class="lineno"> 2738</span>            <span class="keywordflow">return</span> <span class="keyword">new</span> Vector3Int(size.x / downscale, size.y / downscale, size.z / downscale);</div>
<div class="line"><a id="l02739" name="l02739"></a><span class="lineno"> 2739</span>        }</div>
<div class="line"><a id="l02740" name="l02740"></a><span class="lineno"> 2740</span> </div>
<div class="line"><a id="l02741" name="l02741"></a><span class="lineno"> 2741</span>        <span class="keyword">private</span> Vector3Int PressureGridSize(Vector3Int size, <span class="keywordtype">int</span> downscale)</div>
<div class="line"><a id="l02742" name="l02742"></a><span class="lineno"> 2742</span>        {</div>
<div class="line"><a id="l02743" name="l02743"></a><span class="lineno"> 2743</span>            <span class="keywordflow">return</span> <span class="keyword">new</span> Vector3Int(size.x / downscale + 1, size.y / downscale + 1, size.z / downscale + 1);</div>
<div class="line"><a id="l02744" name="l02744"></a><span class="lineno"> 2744</span>        }</div>
<div class="line"><a id="l02745" name="l02745"></a><span class="lineno"> 2745</span> </div>
<div class="line"><a id="l02746" name="l02746"></a><span class="lineno"> 2746</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> IntDivCeil(<span class="keywordtype">int</span> a, <span class="keywordtype">int</span> b)</div>
<div class="line"><a id="l02747" name="l02747"></a><span class="lineno"> 2747</span>        {</div>
<div class="line"><a id="l02748" name="l02748"></a><span class="lineno"> 2748</span>            <span class="keywordflow">return</span> (a + b - 1) / b;</div>
<div class="line"><a id="l02749" name="l02749"></a><span class="lineno"> 2749</span>        }</div>
<div class="line"><a id="l02750" name="l02750"></a><span class="lineno"> 2750</span> </div>
<div class="line"><a id="l02751" name="l02751"></a><span class="lineno"> 2751</span>        <span class="keyword">private</span> Vector3 GetLightColor(Light light)</div>
<div class="line"><a id="l02752" name="l02752"></a><span class="lineno"> 2752</span>        {</div>
<div class="line"><a id="l02753" name="l02753"></a><span class="lineno"> 2753</span>            Vector3 lightColor = <span class="keyword">new</span> Vector3(light.color.r, light.color.g, light.color.b);</div>
<div class="line"><a id="l02754" name="l02754"></a><span class="lineno"> 2754</span><span class="preprocessor">#if UNITY_PIPELINE_HDRP</span></div>
<div class="line"><a id="l02755" name="l02755"></a><span class="lineno"> 2755</span>            var lightData = light.GetComponent&lt;HDAdditionalLightData&gt;();</div>
<div class="line"><a id="l02756" name="l02756"></a><span class="lineno"> 2756</span>            <span class="keywordflow">if</span> (lightData != <span class="keyword">null</span>)</div>
<div class="line"><a id="l02757" name="l02757"></a><span class="lineno"> 2757</span>            {</div>
<div class="line"><a id="l02758" name="l02758"></a><span class="lineno"> 2758</span>                <span class="keywordtype">float</span> intensityHDRP = lightData.intensity;</div>
<div class="line"><a id="l02759" name="l02759"></a><span class="lineno"> 2759</span>                <span class="keywordflow">return</span> 0.03f * lightColor * intensityHDRP;</div>
<div class="line"><a id="l02760" name="l02760"></a><span class="lineno"> 2760</span>            }</div>
<div class="line"><a id="l02761" name="l02761"></a><span class="lineno"> 2761</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l02762" name="l02762"></a><span class="lineno"> 2762</span>            <span class="keywordtype">float</span> intensity = light.intensity;</div>
<div class="line"><a id="l02763" name="l02763"></a><span class="lineno"> 2763</span>            <span class="keywordflow">return</span> lightColor * intensity;</div>
<div class="line"><a id="l02764" name="l02764"></a><span class="lineno"> 2764</span>        }</div>
<div class="line"><a id="l02765" name="l02765"></a><span class="lineno"> 2765</span> </div>
<div class="line"><a id="l02766" name="l02766"></a><span class="lineno"> 2766</span>        <span class="keyword">private</span> <span class="keywordtype">int</span> GetLights(ref Vector4[] lightColors, ref Vector4[] lightPositions, <span class="keywordtype">float</span> brightness = 1.0f)</div>
<div class="line"><a id="l02767" name="l02767"></a><span class="lineno"> 2767</span>        {</div>
<div class="line"><a id="l02768" name="l02768"></a><span class="lineno"> 2768</span>            <span class="keywordtype">int</span> lightCount = 0;</div>
<div class="line"><a id="l02769" name="l02769"></a><span class="lineno"> 2769</span>            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a8fd6b7f69ecca3dc73e75ccb30100de4">Lights</a>.Count; i++)</div>
<div class="line"><a id="l02770" name="l02770"></a><span class="lineno"> 2770</span>            {</div>
<div class="line"><a id="l02771" name="l02771"></a><span class="lineno"> 2771</span>                <span class="keywordflow">if</span> (<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a8fd6b7f69ecca3dc73e75ccb30100de4">Lights</a>[i] == <span class="keyword">null</span> || !<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a8fd6b7f69ecca3dc73e75ccb30100de4">Lights</a>[i].enabled)</div>
<div class="line"><a id="l02772" name="l02772"></a><span class="lineno"> 2772</span>                    <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l02773" name="l02773"></a><span class="lineno"> 2773</span>                Vector3 color = GetLightColor(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a8fd6b7f69ecca3dc73e75ccb30100de4">Lights</a>[i]);</div>
<div class="line"><a id="l02774" name="l02774"></a><span class="lineno"> 2774</span>                Vector3 pos = <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a8fd6b7f69ecca3dc73e75ccb30100de4">Lights</a>[i].transform.position;</div>
<div class="line"><a id="l02775" name="l02775"></a><span class="lineno"> 2775</span>                lightColors[lightCount] = brightness * <span class="keyword">new</span> Vector4(color.x, color.y, color.z, 0.0f);</div>
<div class="line"><a id="l02776" name="l02776"></a><span class="lineno"> 2776</span>                lightPositions[lightCount] =</div>
<div class="line"><a id="l02777" name="l02777"></a><span class="lineno"> 2777</span>                    <span class="keyword">new</span> Vector4(pos.x, pos.y, pos.z, 1.0f / Mathf.Max(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a8fd6b7f69ecca3dc73e75ccb30100de4">Lights</a>[i].range * <a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a8fd6b7f69ecca3dc73e75ccb30100de4">Lights</a>[i].range, 0.00001f));</div>
<div class="line"><a id="l02778" name="l02778"></a><span class="lineno"> 2778</span>                lightCount++;</div>
<div class="line"><a id="l02779" name="l02779"></a><span class="lineno"> 2779</span>                <span class="keywordflow">if</span> (lightCount == MAX_LIGHT_COUNT)</div>
<div class="line"><a id="l02780" name="l02780"></a><span class="lineno"> 2780</span>                {</div>
<div class="line"><a id="l02781" name="l02781"></a><span class="lineno"> 2781</span>                    Debug.Log(<span class="stringliteral">&quot;Zibra Flames instance: Max light count reached.&quot;</span>);</div>
<div class="line"><a id="l02782" name="l02782"></a><span class="lineno"> 2782</span>                    <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l02783" name="l02783"></a><span class="lineno"> 2783</span>                }</div>
<div class="line"><a id="l02784" name="l02784"></a><span class="lineno"> 2784</span>            }</div>
<div class="line"><a id="l02785" name="l02785"></a><span class="lineno"> 2785</span>            <span class="keywordflow">return</span> lightCount;</div>
<div class="line"><a id="l02786" name="l02786"></a><span class="lineno"> 2786</span>        }</div>
<div class="line"><a id="l02787" name="l02787"></a><span class="lineno"> 2787</span> </div>
<div class="line"><a id="l02788" name="l02788"></a><span class="lineno"> 2788</span>        <span class="keywordtype">void</span> ValidateManipulators()</div>
<div class="line"><a id="l02789" name="l02789"></a><span class="lineno"> 2789</span>        {</div>
<div class="line"><a id="l02790" name="l02790"></a><span class="lineno"> 2790</span>            <span class="keywordflow">if</span> (Manipulators != <span class="keyword">null</span>)</div>
<div class="line"><a id="l02791" name="l02791"></a><span class="lineno"> 2791</span>            {</div>
<div class="line"><a id="l02792" name="l02792"></a><span class="lineno"> 2792</span>                HashSet&lt;Manipulator&gt; manipulatorsSet = <span class="keyword">new</span> HashSet&lt;Manipulator&gt;(Manipulators);</div>
<div class="line"><a id="l02793" name="l02793"></a><span class="lineno"> 2793</span>                manipulatorsSet.Remove(<span class="keyword">null</span>);</div>
<div class="line"><a id="l02794" name="l02794"></a><span class="lineno"> 2794</span>                Manipulators = <span class="keyword">new</span> List&lt;Manipulator&gt;(manipulatorsSet);</div>
<div class="line"><a id="l02795" name="l02795"></a><span class="lineno"> 2795</span>                Manipulators.Sort(<span class="keyword">new</span> <a class="code hl_class" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator_compare.html">ManipulatorCompare</a>());</div>
<div class="line"><a id="l02796" name="l02796"></a><span class="lineno"> 2796</span>            }</div>
<div class="line"><a id="l02797" name="l02797"></a><span class="lineno"> 2797</span>        }</div>
<div class="line"><a id="l02798" name="l02798"></a><span class="lineno"> 2798</span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ForceCloseCommandEncoder(CommandBuffer cmdList)</div>
<div class="line"><a id="l02799" name="l02799"></a><span class="lineno"> 2799</span>        {</div>
<div class="line"><a id="l02800" name="l02800"></a><span class="lineno"> 2800</span><span class="preprocessor">#if UNITY_EDITOR_OSX || (!UNITY_EDITOR &amp;&amp; UNITY_STANDALONE_OSX) || (!UNITY_EDITOR &amp;&amp; UNITY_IOS)</span></div>
<div class="line"><a id="l02801" name="l02801"></a><span class="lineno"> 2801</span>            <span class="comment">// Unity bug workaround</span></div>
<div class="line"><a id="l02802" name="l02802"></a><span class="lineno"> 2802</span>            <span class="comment">// For whatever reason, Unity sometimes doesn&#39;t close command encoder when we request it from native plugin</span></div>
<div class="line"><a id="l02803" name="l02803"></a><span class="lineno"> 2803</span>            <span class="comment">// So when we try to start our command encoder with active encoder already present it leads to crash</span></div>
<div class="line"><a id="l02804" name="l02804"></a><span class="lineno"> 2804</span>            <span class="comment">// This happens when scene have Terrain (I still have no idea why)</span></div>
<div class="line"><a id="l02805" name="l02805"></a><span class="lineno"> 2805</span>            <span class="comment">// So we force change command encoder like that, and this one closes gracefully</span></div>
<div class="line"><a id="l02806" name="l02806"></a><span class="lineno"> 2806</span>            <span class="keywordflow">if</span> (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Metal)</div>
<div class="line"><a id="l02807" name="l02807"></a><span class="lineno"> 2807</span>            {</div>
<div class="line"><a id="l02808" name="l02808"></a><span class="lineno"> 2808</span>                cmdList.DispatchCompute(<a class="code hl_variable" href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">materialParameters</a>.NoOpCompute, 0, 1, 1, 1);</div>
<div class="line"><a id="l02809" name="l02809"></a><span class="lineno"> 2809</span>            }</div>
<div class="line"><a id="l02810" name="l02810"></a><span class="lineno"> 2810</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l02811" name="l02811"></a><span class="lineno"> 2811</span>        }</div>
<div class="line"><a id="l02812" name="l02812"></a><span class="lineno"> 2812</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l02813" name="l02813"></a><span class="lineno"> 2813</span><span class="preprocessor">#endregion</span></div>
<div class="line"><a id="l02814" name="l02814"></a><span class="lineno"> 2814</span>    }</div>
<div class="line"><a id="l02815" name="l02815"></a><span class="lineno"> 2815</span>}</div>
<div class="ttc" id="aclasscom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager_html"><div class="ttname"><a href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html">com.zibra.common.Editor.SDFObjects.ServerAuthManager</a></div><div class="ttdoc">Class responsible for managing licensing and allowing server communication.</div><div class="ttdef"><b>Definition:</b> <a href="_server_auth_manager_8cs_source.html#l00019">ServerAuthManager.cs:20</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager_html_a4e698e47214df7a64446630702660cd1"><div class="ttname"><a href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html#a4e698e47214df7a64446630702660cd1">com.zibra.common.Editor.SDFObjects.ServerAuthManager.GetInstance</a></div><div class="ttdeci">static ServerAuthManager GetInstance()</div><div class="ttdoc">Returns singleton of this class.</div><div class="ttdef"><b>Definition:</b> <a href="_server_auth_manager_8cs_source.html#l00205">ServerAuthManager.cs:205</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager_html_a5cccd710313a9659a49c23a2ecd05ed1"><div class="ttname"><a href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html#a5cccd710313a9659a49c23a2ecd05ed1">com.zibra.common.Editor.SDFObjects.ServerAuthManager.IsLicenseVerified</a></div><div class="ttdeci">bool IsLicenseVerified(Effect effect)</div><div class="ttdoc">Checks whether license is verified for specified effect.</div><div class="ttdef"><b>Definition:</b> <a href="_server_auth_manager_8cs_source.html#l00109">ServerAuthManager.cs:109</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager_html_acd9c2a1cf576f0fd9da232d337d9720c"><div class="ttname"><a href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html#acd9c2a1cf576f0fd9da232d337d9720c">com.zibra.common.Editor.SDFObjects.ServerAuthManager.Effect</a></div><div class="ttdeci">Effect</div><div class="ttdoc">Effect types.</div><div class="ttdef"><b>Definition:</b> <a href="_server_auth_manager_8cs_source.html#l00026">ServerAuthManager.cs:27</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager_html_ad699d519d196e8619bc155a65c7fdac2"><div class="ttname"><a href="classcom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_1_1_server_auth_manager.html#ad699d519d196e8619bc155a65c7fdac2">com.zibra.common.Editor.SDFObjects.ServerAuthManager.GetErrorMessage</a></div><div class="ttdeci">string GetErrorMessage(Status status)</div><div class="ttdoc">Returns human readable string explaining error based on Status.</div><div class="ttdef"><b>Definition:</b> <a href="_server_auth_manager_8cs_source.html#l00154">ServerAuthManager.cs:154</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1common_1_1_s_d_f_objects_1_1_s_d_f_object_html"><div class="ttname"><a href="classcom_1_1zibra_1_1common_1_1_s_d_f_objects_1_1_s_d_f_object.html">com.zibra.common.SDFObjects.SDFObject</a></div><div class="ttdoc">Base class for SDF classes.</div><div class="ttdef"><b>Definition:</b> <a href="_s_d_f_object_8cs_source.html#l00014">SDFObject.cs:15</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector_html"><div class="ttname"><a href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html">com.zibra.common.Utilities.RenderPipelineDetector</a></div><div class="ttdoc">Class responsible for querying data about Render Pipelines.</div><div class="ttdef"><b>Definition:</b> <a href="_render_pipeline_detector_8cs_source.html#l00015">RenderPipelineDetector.cs:16</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector_html_a4b4059d56eb5d1eb4843d2d6c7ba77a7"><div class="ttname"><a href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html#a4b4059d56eb5d1eb4843d2d6c7ba77a7">com.zibra.common.Utilities.RenderPipelineDetector.RenderPipeline</a></div><div class="ttdeci">RenderPipeline</div><div class="ttdoc">Type of render pipeline.</div><div class="ttdef"><b>Definition:</b> <a href="_render_pipeline_detector_8cs_source.html#l00020">RenderPipelineDetector.cs:21</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector_html_af6ca78a99c6f090da4112d31624fbd08"><div class="ttname"><a href="classcom_1_1zibra_1_1common_1_1_utilities_1_1_render_pipeline_detector.html#af6ca78a99c6f090da4112d31624fbd08">com.zibra.common.Utilities.RenderPipelineDetector.GetRenderPipelineType</a></div><div class="ttdeci">static RenderPipeline GetRenderPipelineType()</div><div class="ttdoc">Detects which render pipeline is currently used.</div><div class="ttdef"><b>Definition:</b> <a href="_render_pipeline_detector_8cs_source.html#l00033">RenderPipelineDetector.cs:33</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters</a></div><div class="ttdoc">Component that contains volume material parameters.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00022">ZibraSmokeAndFireMaterialParameters.cs:23</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a027137114f1de5ad423f1d5a5d23e462"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a027137114f1de5ad423f1d5a5d23e462">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.IlluminationResolution</a></div><div class="ttdeci">float IlluminationResolution</div><div class="ttdoc">Specifies the illumination resolution.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00281">ZibraSmokeAndFireMaterialParameters.cs:281</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a13aa33b610255ffda5c757852b396d38"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a13aa33b610255ffda5c757852b396d38">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.RayMarchingStepSize</a></div><div class="ttdeci">float RayMarchingStepSize</div><div class="ttdoc">Specifies the raymarching step size.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00253">ZibraSmokeAndFireMaterialParameters.cs:253</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a14e138c314413407cff5c51c3014b14a"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a14e138c314413407cff5c51c3014b14a">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.FuelDensity</a></div><div class="ttdeci">float FuelDensity</div><div class="ttdoc">Density of rendered fuel.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00085">ZibraSmokeAndFireMaterialParameters.cs:85</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a1622a3d38fc3efc3408bdf24cbf3f57a"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a1622a3d38fc3efc3408bdf24cbf3f57a">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ShadowProjectionQuality</a></div><div class="ttdeci">ShadowProjectionQuality</div><div class="ttdoc">Quality of projected shadows.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00226">ZibraSmokeAndFireMaterialParameters.cs:227</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a2b103e8d00331822b55bc41a410d72ce"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a2b103e8d00331822b55bc41a410d72ce">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.AbsorptionColor</a></div><div class="ttdeci">Color AbsorptionColor</div><div class="ttdoc">The absorption coefficients.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00092">ZibraSmokeAndFireMaterialParameters.cs:92</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a2b4b6068fc3333ddbb02ac27514e3416"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a2b4b6068fc3333ddbb02ac27514e3416">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ShadowDistanceDecay</a></div><div class="ttdeci">float ShadowDistanceDecay</div><div class="ttdoc">Specifies the distance where the shadows start to fade off.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00205">ZibraSmokeAndFireMaterialParameters.cs:205</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a2cff1b1346b0392dc707f0065b823349"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a2cff1b1346b0392dc707f0065b823349">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ShadowAbsorptionColor</a></div><div class="ttdeci">Color ShadowAbsorptionColor</div><div class="ttdoc">The shadow absorption color. Defines color of the light for shadow render purposes.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00109">ZibraSmokeAndFireMaterialParameters.cs:109</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a314f489e56fc4099b92ba4ced2e23b93"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a314f489e56fc4099b92ba4ced2e23b93">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.SmokeDensity</a></div><div class="ttdeci">float SmokeDensity</div><div class="ttdoc">Density of rendered smoke.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00078">ZibraSmokeAndFireMaterialParameters.cs:78</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a349c1172d9ccb57a1c380e71e5deaca9"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a349c1172d9ccb57a1c380e71e5deaca9">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ObjectIlluminationShadows</a></div><div class="ttdeci">bool ObjectIlluminationShadows</div><div class="ttdoc">Specifies if volume is able to cast shadows.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00135">ZibraSmokeAndFireMaterialParameters.cs:135</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a3cd49963a4e4f4a6a1478e3790fb2073"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a3cd49963a4e4f4a6a1478e3790fb2073">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.FireBrightness</a></div><div class="ttdeci">float FireBrightness</div><div class="ttdoc">Specifies the brightness of fire.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00169">ZibraSmokeAndFireMaterialParameters.cs:169</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a3cd78cd2f366cb4b12414af882fe6aa0"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a3cd78cd2f366cb4b12414af882fe6aa0">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.BlackBodyBrightness</a></div><div class="ttdeci">float BlackBodyBrightness</div><div class="ttdoc">Specifies the brightness of black body.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00159">ZibraSmokeAndFireMaterialParameters.cs:159</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a3d90a06eca77162239ec79c0de24c469"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a3d90a06eca77162239ec79c0de24c469">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.IlluminationStepSize</a></div><div class="ttdeci">float IlluminationStepSize</div><div class="ttdoc">Specifies the illumination raymarching step size.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00288">ZibraSmokeAndFireMaterialParameters.cs:288</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a44c852b3e6ec03028f6ab922db39bc70"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a44c852b3e6ec03028f6ab922db39bc70">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ObjectShadowIntensity</a></div><div class="ttdeci">float ObjectShadowIntensity</div><div class="ttdoc">The intensity of shadows casted by volume.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00198">ZibraSmokeAndFireMaterialParameters.cs:198</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a509147db4aef684fc27ee758480b480f"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a509147db4aef684fc27ee758480b480f">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ShadowResolution</a></div><div class="ttdeci">float ShadowResolution</div><div class="ttdoc">Specifies the shadow resolution.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00260">ZibraSmokeAndFireMaterialParameters.cs:260</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a6009866bc671eeea31109f2c54382dd2"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a6009866bc671eeea31109f2c54382dd2">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ScatteringAttenuation</a></div><div class="ttdeci">float ScatteringAttenuation</div><div class="ttdoc">The scattering attenuation.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00116">ZibraSmokeAndFireMaterialParameters.cs:116</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a6289454206261f6c9375f76d7c4238c5"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a6289454206261f6c9375f76d7c4238c5">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ObjectPrimaryShadows</a></div><div class="ttdeci">bool ObjectPrimaryShadows</div><div class="ttdoc">Specifies if volume is able to receive shadows.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00129">ZibraSmokeAndFireMaterialParameters.cs:129</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a646450d6b4d0d5944bc1a5f7eb25eea6"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a646450d6b4d0d5944bc1a5f7eb25eea6">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.MaxEffectParticles</a></div><div class="ttdeci">int MaxEffectParticles</div><div class="ttdoc">Specifies the maximum of particles in volume at a time.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00302">ZibraSmokeAndFireMaterialParameters.cs:302</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a6e51f3b002b227dc187dcd475848d6ae"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a6e51f3b002b227dc187dcd475848d6ae">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ScatteringContribution</a></div><div class="ttdeci">float ScatteringContribution</div><div class="ttdoc">The scattering contribution.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00123">ZibraSmokeAndFireMaterialParameters.cs:123</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a740efc881a3c56258b2b170d4f2553e0"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a740efc881a3c56258b2b170d4f2553e0">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.VolumeEdgeFadeoff</a></div><div class="ttdeci">float VolumeEdgeFadeoff</div><div class="ttdoc">Specifies the distance from volume's bounds where smoke/fire start to fade off.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00246">ZibraSmokeAndFireMaterialParameters.cs:246</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a75369b39a836c0b51f37ddc08a9e3eca"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a75369b39a836c0b51f37ddc08a9e3eca">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.IlluminationBrightness</a></div><div class="ttdeci">float IlluminationBrightness</div><div class="ttdoc">Specifies the brightness of illumination.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00145">ZibraSmokeAndFireMaterialParameters.cs:145</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a7945a66501e6d3f4ad6b5d2315e0f7f3"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a7945a66501e6d3f4ad6b5d2315e0f7f3">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ShadowIntensity</a></div><div class="ttdeci">float ShadowIntensity</div><div class="ttdoc">The intensity of shadows recieved by volume.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00212">ZibraSmokeAndFireMaterialParameters.cs:212</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a8c2bc6a9913661a1c77bea585f3a3021"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a8c2bc6a9913661a1c77bea585f3a3021">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ShadowStepSize</a></div><div class="ttdeci">float ShadowStepSize</div><div class="ttdoc">Specifies the shadow raymarching step size.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00267">ZibraSmokeAndFireMaterialParameters.cs:267</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a92d7008fb6b55166239d6a7ca44284b1"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a92d7008fb6b55166239d6a7ca44284b1">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.SmokeMaterial</a></div><div class="ttdeci">Material SmokeMaterial</div><div class="ttdoc">Material that will be used to render volume.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00041">ZibraSmokeAndFireMaterialParameters.cs:41</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a963de9a74a3301001bd3e2eb77294001"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a963de9a74a3301001bd3e2eb77294001">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ScatteringColor</a></div><div class="ttdeci">Color ScatteringColor</div><div class="ttdoc">The scattering color.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00099">ZibraSmokeAndFireMaterialParameters.cs:99</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a96cc752b1e70b97f1aee6d5e8b39e238"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a96cc752b1e70b97f1aee6d5e8b39e238">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.TemperatureDensityDependence</a></div><div class="ttdeci">float TemperatureDensityDependence</div><div class="ttdoc">Controls the optical density of the volume, decreasing with increasing temperature.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00191">ZibraSmokeAndFireMaterialParameters.cs:191</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a9abffea1f85321531faee176a07e1852"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a9abffea1f85321531faee176a07e1852">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.IlluminationMaxSteps</a></div><div class="ttdeci">int IlluminationMaxSteps</div><div class="ttdoc">Specifies the illumination raymarching max steps.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00295">ZibraSmokeAndFireMaterialParameters.cs:295</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_a9d605862c5da47de09e2ba1e73c3f730"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#a9d605862c5da47de09e2ba1e73c3f730">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.IlluminationSoftness</a></div><div class="ttdeci">float IlluminationSoftness</div><div class="ttdoc">Specifies the softness of fire.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00152">ZibraSmokeAndFireMaterialParameters.cs:152</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_aa5609a0a41992bd3941faac8986189d0"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#aa5609a0a41992bd3941faac8986189d0">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.EnableProjectedShadows</a></div><div class="ttdeci">bool EnableProjectedShadows</div><div class="ttdoc">Projecting shadows from the smoke to the objects.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00221">ZibraSmokeAndFireMaterialParameters.cs:221</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_ac562f67b17dab19fb68b5b78d11a1232"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#ac562f67b17dab19fb68b5b78d11a1232">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ParticleLifetime</a></div><div class="ttdeci">int ParticleLifetime</div><div class="ttdoc">Specifies the lifetime of a particles.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00313">ZibraSmokeAndFireMaterialParameters.cs:313</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_ac96c21d74cb6f79d01f0043849565162"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#ac96c21d74cb6f79d01f0043849565162">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ShadowProjectionQualityLevel</a></div><div class="ttdeci">ShadowProjectionQuality ShadowProjectionQualityLevel</div><div class="ttdoc">Quality of the shadow projection. Specified by ShadowProjectionQuality.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00239">ZibraSmokeAndFireMaterialParameters.cs:239</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_acb5e34534b919693bcf7992a9c41a9a1"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#acb5e34534b919693bcf7992a9c41a9a1">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ShadowMaxSteps</a></div><div class="ttdeci">int ShadowMaxSteps</div><div class="ttdoc">Specifies the shadow raymarching max steps.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00274">ZibraSmokeAndFireMaterialParameters.cs:274</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_ad8b5e46d40fa01f89330676850b1b2d7"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#ad8b5e46d40fa01f89330676850b1b2d7">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.ShadowProjectionMaterial</a></div><div class="ttdeci">Material ShadowProjectionMaterial</div><div class="ttdoc">Custom shadow projection material.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00071">ZibraSmokeAndFireMaterialParameters.cs:71</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters_html_ae66686cc1b7b7432b067958d1af2852c"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_material_parameters.html#ae66686cc1b7b7432b067958d1af2852c">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireMaterialParameters.FireColor</a></div><div class="ttdeci">Color FireColor</div><div class="ttdoc">The shadow absorption coefficients</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_material_parameters_8cs_source.html#l00176">ZibraSmokeAndFireMaterialParameters.cs:176</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters</a></div><div class="ttdoc">Component that contains smoke/fire physics behaviour parameters.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00018">ZibraSmokeAndFireSolverParameters.cs:19</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_a001716b948208be6c6cd1e871c7cc1fa"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a001716b948208be6c6cd1e871c7cc1fa">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.VelocityDecay</a></div><div class="ttdeci">float VelocityDecay</div><div class="ttdoc">Specifies the amount of velocity's fade off through volume.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00131">ZibraSmokeAndFireSolverParameters.cs:131</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_a20c587a478cfacd0c8ddf21730659308"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a20c587a478cfacd0c8ddf21730659308">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.MaximumVelocity</a></div><div class="ttdeci">float MaximumVelocity</div><div class="ttdoc">The velocity limit of smoke/fuel</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00088">ZibraSmokeAndFireSolverParameters.cs:88</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_a28afaad3316fa76faed5e38e5a5e2a87"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a28afaad3316fa76faed5e38e5a5e2a87">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.Sharpen</a></div><div class="ttdeci">float Sharpen</div><div class="ttdoc">Strength of sharpening effect in the simulation. Higher values correspond to more detailed simulation...</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00104">ZibraSmokeAndFireSolverParameters.cs:104</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_a33457d6a2e6224e33862265cae43d7e8"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a33457d6a2e6224e33862265cae43d7e8">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.ColorDecay</a></div><div class="ttdeci">float ColorDecay</div><div class="ttdoc">This parameter is responsible for reducing the optical density of smoke with time....</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00124">ZibraSmokeAndFireSolverParameters.cs:124</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_a352824b3cf246e3b5e6d132d4626ecf7"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a352824b3cf246e3b5e6d132d4626ecf7">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.ReactionSpeed</a></div><div class="ttdeci">float ReactionSpeed</div><div class="ttdoc">Rate at which combustion reaction occurs in the simulation.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00081">ZibraSmokeAndFireSolverParameters.cs:81</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_a417910ac454e34da772e1cb914446f98"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a417910ac454e34da772e1cb914446f98">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.PressureReuse</a></div><div class="ttdeci">float PressureReuse</div><div class="ttdoc">Determines how much of the pressure data from previous simulation iteration gets reused to simulate c...</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00145">ZibraSmokeAndFireSolverParameters.cs:145</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_a458fbc89ca211a413c0a20e445c1310e"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a458fbc89ca211a413c0a20e445c1310e">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.SharpenThreshold</a></div><div class="ttdeci">float SharpenThreshold</div><div class="ttdoc">Threshold that differentiates between regions that need to be simulated more accurately.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00116">ZibraSmokeAndFireSolverParameters.cs:116</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_a59b4e65d490a0e891dd38312e718ddf1"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a59b4e65d490a0e891dd38312e718ddf1">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.HeatBuoyancy</a></div><div class="ttdeci">float HeatBuoyancy</div><div class="ttdoc">Determines the strength of the upward force applied to heat in the simulation.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00060">ZibraSmokeAndFireSolverParameters.cs:60</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_a60333e5c1045b9f84dbb1d157394a690"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a60333e5c1045b9f84dbb1d157394a690">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.PressureSolveIterations</a></div><div class="ttdeci">int PressureSolveIterations</div><div class="ttdoc">The number of iterations used to compute the pressure.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00180">ZibraSmokeAndFireSolverParameters.cs:180</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_a987baafffb0159de6d47ef7ff1e1041e"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#a987baafffb0159de6d47ef7ff1e1041e">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.MinimumVelocity</a></div><div class="ttdeci">float MinimumVelocity</div><div class="ttdoc">Specifies the min velocity inside the volume.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00095">ZibraSmokeAndFireSolverParameters.cs:95</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_aaeb873fa44fbecff2ebeb95b0871e415"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#aaeb873fa44fbecff2ebeb95b0871e415">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.SmokeBuoyancy</a></div><div class="ttdeci">float SmokeBuoyancy</div><div class="ttdoc">Controls the strength of the buoyancy force applied to the smoke in the simulation.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00050">ZibraSmokeAndFireSolverParameters.cs:50</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_ac6da9dedc2700689e9b7888cc5fcf9f8"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#ac6da9dedc2700689e9b7888cc5fcf9f8">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.TempThreshold</a></div><div class="ttdeci">float TempThreshold</div><div class="ttdoc">Combustion threshold. As soon as fuel exceeds this threshold, fuel combustion reaction starts.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00067">ZibraSmokeAndFireSolverParameters.cs:67</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_ac85398ce191195d8b67fb57859116477"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#ac85398ce191195d8b67fb57859116477">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.PressureProjection</a></div><div class="ttdeci">float PressureProjection</div><div class="ttdoc">Controls viscosity/turbulence.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00165">ZibraSmokeAndFireSolverParameters.cs:165</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_ad3a855025d212c719d292cb6ce16bafc"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#ad3a855025d212c719d292cb6ce16bafc">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.Gravity</a></div><div class="ttdeci">Vector3 Gravity</div><div class="ttdoc">Specifies the gravity vector inside the volume.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00040">ZibraSmokeAndFireSolverParameters.cs:40</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters_html_ae740da185f94dd69f31bfcc5a28da7f8"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_1_1_zibra_smoke_and_fire_solver_parameters.html#ae740da185f94dd69f31bfcc5a28da7f8">com.zibra.smoke_and_fire.DataStructures.ZibraSmokeAndFireSolverParameters.HeatEmission</a></div><div class="ttdeci">float HeatEmission</div><div class="ttdoc">Rate of heat emission from the combustion reaction of the fuel in the simulation.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_solver_parameters_8cs_source.html#l00074">ZibraSmokeAndFireSolverParameters.cs:74</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator_compare_html"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator_compare.html">com.zibra.smoke_and_fire.Manipulators.ManipulatorCompare</a></div><div class="ttdoc">Comparer used for sorting manipulators.</div><div class="ttdef"><b>Definition:</b> <a href="_smoke_01and_01_fire_2_scripts_2_solver_2_manipulator_8cs_source.html#l00013">Manipulator.cs:14</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator_html"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html">com.zibra.smoke_and_fire.Manipulators.Manipulator</a></div><div class="ttdoc">Base class for fluid manipulator.</div><div class="ttdef"><b>Definition:</b> <a href="_smoke_01and_01_fire_2_scripts_2_solver_2_manipulator_8cs_source.html#l00068">Manipulator.cs:69</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator_html_a57c404a5c07698ea543d2d900d60c282"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_manipulator.html#a57c404a5c07698ea543d2d900d60c282">com.zibra.smoke_and_fire.Manipulators.Manipulator.ManipulatorType</a></div><div class="ttdeci">ManipulatorType</div><div class="ttdoc">Manipulator types.</div><div class="ttdef"><b>Definition:</b> <a href="_smoke_01and_01_fire_2_scripts_2_solver_2_manipulator_8cs_source.html#l00079">Manipulator.cs:80</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter_html"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter.html">com.zibra.smoke_and_fire.Manipulators.ZibraParticleEmitter</a></div><div class="ttdoc">Manipulator that emits Effect Particles.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_particle_emitter_8cs_source.html#l00019">ZibraParticleEmitter.cs:20</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter_html_a87cafe63badc45546f2eb940f2a94d70"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter.html#a87cafe63badc45546f2eb940f2a94d70">com.zibra.smoke_and_fire.Manipulators.ZibraParticleEmitter.RenderingMode</a></div><div class="ttdeci">RenderingMode</div><div class="ttdoc">See RenderMode.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_particle_emitter_8cs_source.html#l00025">ZibraParticleEmitter.cs:26</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter_html_aeab2fc481d3d6116dd723c79bd70d25d"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_1_1_zibra_particle_emitter.html#aeab2fc481d3d6116dd723c79bd70d25d">com.zibra.smoke_and_fire.Manipulators.ZibraParticleEmitter.ParticleColor</a></div><div class="ttdeci">Gradient ParticleColor</div><div class="ttdoc">Curve that defines color depending on the particle's lifetime.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_particle_emitter_8cs_source.html#l00070">ZibraParticleEmitter.cs:70</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire</a></div><div class="ttdoc">Main Smoke &amp; Fire solver component</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00060">ZibraSmokeAndFire.cs:61</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a03f1d1aa875dc4704958831ef7eaea9d"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a03f1d1aa875dc4704958831ef7eaea9d">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.StopSolver</a></div><div class="ttdeci">void StopSolver()</div><div class="ttdoc">Stops the simulation</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00351">ZibraSmokeAndFire.cs:351</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a08c0566c1c813868227dbde1574e2437"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a08c0566c1c813868227dbde1574e2437">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.OnChanged</a></div><div class="ttdeci">Action OnChanged</div><div class="ttdoc">(Editor only) Event that is triggered when state of manipulator changes to trigger update of custom e...</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00493">ZibraSmokeAndFire.cs:493</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a0a35bae3070e845517bfcfb64688f2ca"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0a35bae3070e845517bfcfb64688f2ca">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.CellSize</a></div><div class="ttdeci">float CellSize</div><div class="ttdoc">Size of single simulation node.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00215">ZibraSmokeAndFire.cs:215</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a0af557e93137dbb3358b82ad34849b49"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0af557e93137dbb3358b82ad34849b49">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.NotifyChange</a></div><div class="ttdeci">void NotifyChange()</div><div class="ttdoc">(Editor only) Triggers custom editor update.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00501">ZibraSmokeAndFire.cs:501</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a0e3da4c5b2449adcbf9348c54e50812d"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a0e3da4c5b2449adcbf9348c54e50812d">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.ContainerSize</a></div><div class="ttdeci">Vector3 ContainerSize</div><div class="ttdoc">Size of the simulation volume.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00309">ZibraSmokeAndFire.cs:309</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a2c385f642822975febcc3c48fb9605bd"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a2c385f642822975febcc3c48fb9605bd">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.SimulationMode</a></div><div class="ttdeci">SimulationMode</div><div class="ttdoc">See CurrentSimulationMode.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00072">ZibraSmokeAndFire.cs:73</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a3388dde8463171695ffbfbf8902384c6"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a3388dde8463171695ffbfbf8902384c6">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.MaxFramesInFlight</a></div><div class="ttdeci">UInt32 MaxFramesInFlight</div><div class="ttdoc">Maximum allowed number of frames queued to render.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00197">ZibraSmokeAndFire.cs:197</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a448c1b79bc5cf8c39accde429a5055bd"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a448c1b79bc5cf8c39accde429a5055bd">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.solverParameters</a></div><div class="ttdeci">ZibraSmokeAndFireSolverParameters solverParameters</div><div class="ttdoc">Main parameters of the simulation</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00340">ZibraSmokeAndFire.cs:340</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a4746d9bc10cb2d1892167d68570f20d3"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a4746d9bc10cb2d1892167d68570f20d3">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.HasEmitter</a></div><div class="ttdeci">bool HasEmitter()</div><div class="ttdoc">Checks if simulation has at least one emitter manipulator.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00441">ZibraSmokeAndFire.cs:441</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a513906c0545ef4c34563175adb79277f"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a513906c0545ef4c34563175adb79277f">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.MainLight</a></div><div class="ttdeci">Light MainLight</div><div class="ttdoc">Directional light that will be used for Smoke &amp; Fire lighting.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00154">ZibraSmokeAndFire.cs:154</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a5471ff6648f72a9e172b87554fd6c1b3"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a5471ff6648f72a9e172b87554fd6c1b3">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.GridResolution</a></div><div class="ttdeci">int GridResolution</div><div class="ttdoc">Size of the simulation grid.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00232">ZibraSmokeAndFire.cs:232</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a57b3ef4623ad89b62fe4f32ef9de669f"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a57b3ef4623ad89b62fe4f32ef9de669f">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.Timestep</a></div><div class="ttdeci">float Timestep</div><div class="ttdoc">Timestep used in each simulation iteration.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00179">ZibraSmokeAndFire.cs:179</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a5dc665c2e65c71491cb7a92a3db572be"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a5dc665c2e65c71491cb7a92a3db572be">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.UpdateGridSize</a></div><div class="ttdeci">void UpdateGridSize()</div><div class="ttdoc">Updates values of some constants based on ContainerSize and GridResolution.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00468">ZibraSmokeAndFire.cs:468</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a60f1ebf5864cafb3a02fb0441724bb71"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a60f1ebf5864cafb3a02fb0441724bb71">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.SimulationContainerPosition</a></div><div class="ttdeci">Vector3 SimulationContainerPosition</div><div class="ttdoc">Last simulated container position</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00314">ZibraSmokeAndFire.cs:314</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a6183f87b169d9690a53e7312507c2a42"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6183f87b169d9690a53e7312507c2a42">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.DownscaleFactor</a></div><div class="ttdeci">float DownscaleFactor</div><div class="ttdoc">Scale width/height of smoke &amp; fire render.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00302">ZibraSmokeAndFire.cs:302</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a6727531d04632327e5aa53292d37b73b"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6727531d04632327e5aa53292d37b73b">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.AddManipulator</a></div><div class="ttdeci">void AddManipulator(Manipulator manipulator)</div><div class="ttdoc">Adds manipulator to the simulation.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00416">ZibraSmokeAndFire.cs:416</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a6d4293288031a149d20f7884389e1505"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a6d4293288031a149d20f7884389e1505">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.ActiveSimulationMode</a></div><div class="ttdeci">SimulationMode ActiveSimulationMode</div><div class="ttdoc">Simulation mode currently used by the simulation. Will not be changed if CurrentSimulationMode is cha...</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00118">ZibraSmokeAndFire.cs:118</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a7a7e7d8a5040cee41196e023a9c05060"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a7a7e7d8a5040cee41196e023a9c05060">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.RemoveManipulator</a></div><div class="ttdeci">void RemoveManipulator(Manipulator manipulator)</div><div class="ttdoc">Removes manipulator from the simulation.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00375">ZibraSmokeAndFire.cs:375</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a7f55e56e8e512bd64f9f5aa3ed880ccb"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a7f55e56e8e512bd64f9f5aa3ed880ccb">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.SimulationInternalTime</a></div><div class="ttdeci">float SimulationInternalTime</div><div class="ttdoc">Simulation time passed (in simulation time units)</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00128">ZibraSmokeAndFire.cs:128</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a8fd6b7f69ecca3dc73e75ccb30100de4"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a8fd6b7f69ecca3dc73e75ccb30100de4">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.Lights</a></div><div class="ttdeci">List&lt; Light &gt; Lights</div><div class="ttdoc">List of point lights that contribute to Smoke &amp; Fire lighting.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00170">ZibraSmokeAndFire.cs:170</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a946e85fa04a56c9a658c62641f8df3c7"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a946e85fa04a56c9a658c62641f8df3c7">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.EnableDownscale</a></div><div class="ttdeci">bool EnableDownscale</div><div class="ttdoc">Allows you to render Smoke &amp; Fire in lower resolution.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00287">ZibraSmokeAndFire.cs:287</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a96a6f56e74c3c80dbbc8676e313bdd94"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a96a6f56e74c3c80dbbc8676e313bdd94">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.CurrentInjectionPoint</a></div><div class="ttdeci">CameraEvent CurrentInjectionPoint</div><div class="ttdoc">Injection point used for BRP render.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00320">ZibraSmokeAndFire.cs:320</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_a9fb3b7b8440479d4a0788152380101cf"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#a9fb3b7b8440479d4a0788152380101cf">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.GridSize</a></div><div class="ttdeci">Vector3Int GridSize</div><div class="ttdoc">The grid size of the simulation</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00138">ZibraSmokeAndFire.cs:138</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_aa58f899ad5137c8dd72d88a57a699227"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#aa58f899ad5137c8dd72d88a57a699227">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.GetManipulatorList</a></div><div class="ttdeci">ReadOnlyCollection&lt; Manipulator &gt; GetManipulatorList()</div><div class="ttdoc">Returns read-only list of manipulators.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00396">ZibraSmokeAndFire.cs:396</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_aac0ad2411b42670e36cc79a9865e6a95"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#aac0ad2411b42670e36cc79a9865e6a95">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.HasManipulator</a></div><div class="ttdeci">bool HasManipulator(Manipulator manipulator)</div><div class="ttdoc">Checks whether manipulator list has specified manipulator.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00404">ZibraSmokeAndFire.cs:404</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_ab372eb0691785420d7d9f5f9a6fad33b"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ab372eb0691785420d7d9f5f9a6fad33b">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.SimulationInternalFrame</a></div><div class="ttdeci">int SimulationInternalFrame</div><div class="ttdoc">Number of simulation iterations done so far</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00133">ZibraSmokeAndFire.cs:133</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_abe78de671d42526358a0d4fa561437bc"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#abe78de671d42526358a0d4fa561437bc">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.LastTimestep</a></div><div class="ttdeci">float LastTimestep</div><div class="ttdoc">Last used timestep.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00123">ZibraSmokeAndFire.cs:123</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_ac4792d27f7e5e4a3fc2337191231011a"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ac4792d27f7e5e4a3fc2337191231011a">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.CurrentSimulationMode</a></div><div class="ttdeci">SimulationMode CurrentSimulationMode</div><div class="ttdoc">Setting that determines the type of simulation being performed, with options including Smoke,...</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00103">ZibraSmokeAndFire.cs:103</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_ad2ec1cd6873831fe75a9de4b2f6416cd"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ad2ec1cd6873831fe75a9de4b2f6416cd">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.MaximumFramerate</a></div><div class="ttdeci">float MaximumFramerate</div><div class="ttdoc">Maximum simulation iterations per second.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00335">ZibraSmokeAndFire.cs:335</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_adbe358a3fdd13a7e7cea1a30b81cbe57"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adbe358a3fdd13a7e7cea1a30b81cbe57">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.RunSimulation</a></div><div class="ttdeci">bool RunSimulation</div><div class="ttdoc">Freezes simulation when disabled.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00248">ZibraSmokeAndFire.cs:248</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_adf37d6d706a8e2bea1c3627c23a81da8"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#adf37d6d706a8e2bea1c3627c23a81da8">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.materialParameters</a></div><div class="ttdeci">ZibraSmokeAndFireMaterialParameters materialParameters</div><div class="ttdoc">Main rendering parameters</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00345">ZibraSmokeAndFire.cs:345</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_ae6f6139d03c6cb1987d13cac50d24523"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#ae6f6139d03c6cb1987d13cac50d24523">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.AllInstances</a></div><div class="ttdeci">static List&lt; ZibraSmokeAndFire &gt; AllInstances</div><div class="ttdoc">A list of all instances of the Smoke &amp; Fire solver</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00067">ZibraSmokeAndFire.cs:67</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_af1d6faf266c7e9c47ff8d56c50994d7e"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af1d6faf266c7e9c47ff8d56c50994d7e">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.FixVolumeWorldPosition</a></div><div class="ttdeci">bool FixVolumeWorldPosition</div><div class="ttdoc">When enabled, moving simulation volume will not disturb simulation. When disabled,...</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00276">ZibraSmokeAndFire.cs:276</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_af20b00f33a5e5c39d46a5c26fd4c92f9"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af20b00f33a5e5c39d46a5c26fd4c92f9">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.SimulationIterations</a></div><div class="ttdeci">int SimulationIterations</div><div class="ttdoc">Number of simulation iterations per simulation frame.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00210">ZibraSmokeAndFire.cs:210</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_af294bdac784bb625eaf8704ff2e88685"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af294bdac784bb625eaf8704ff2e88685">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.Initialized</a></div><div class="ttdeci">bool Initialized</div><div class="ttdoc">Is simulation initialized</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00281">ZibraSmokeAndFire.cs:281</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_af7aa989f02edf945bd79a0fd1feab791"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#af7aa989f02edf945bd79a0fd1feab791">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.RunRendering</a></div><div class="ttdeci">bool RunRendering</div><div class="ttdoc">Enables rendering of the smoke/fire.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00264">ZibraSmokeAndFire.cs:264</a></div></div>
<div class="ttc" id="aclasscom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire_html_afcac8381e4e2985d8950aa58684e852a"><div class="ttname"><a href="classcom_1_1zibra_1_1smoke__and__fire_1_1_solver_1_1_zibra_smoke_and_fire.html#afcac8381e4e2985d8950aa58684e852a">com.zibra.smoke_and_fire.Solver.ZibraSmokeAndFire.LimitFramerate</a></div><div class="ttdeci">bool LimitFramerate</div><div class="ttdoc">Whether to limit maximum number of smoke simulation iterations per second.</div><div class="ttdef"><b>Definition:</b> <a href="_zibra_smoke_and_fire_8cs_source.html#l00326">ZibraSmokeAndFire.cs:326</a></div></div>
<div class="ttc" id="anamespacecom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects_html"><div class="ttname"><a href="namespacecom_1_1zibra_1_1common_1_1_editor_1_1_s_d_f_objects.html">com.zibra.common.Editor.SDFObjects</a></div><div class="ttdoc">Namespace that contains SDF generation related classes.</div><div class="ttdef"><b>Definition:</b> <a href="_server_auth_manager_8cs_source.html#l00011">ServerAuthManager.cs:12</a></div></div>
<div class="ttc" id="anamespacecom_1_1zibra_1_1common_1_1_s_d_f_objects_html"><div class="ttname"><a href="namespacecom_1_1zibra_1_1common_1_1_s_d_f_objects.html">com.zibra.common.SDFObjects</a></div><div class="ttdoc">Namespace that contains SDF classes.</div><div class="ttdef"><b>Definition:</b> <a href="_analytic_s_d_f_8cs_source.html#l00010">AnalyticSDF.cs:11</a></div></div>
<div class="ttc" id="anamespacecom_1_1zibra_1_1common_1_1_utilities_html"><div class="ttname"><a href="namespacecom_1_1zibra_1_1common_1_1_utilities.html">com.zibra.common.Utilities</a></div><div class="ttdoc">Namespace that contains miscellaneous utilities.</div><div class="ttdef"><b>Definition:</b> <a href="_mesh_utilities_8cs_source.html#l00011">MeshUtilities.cs:12</a></div></div>
<div class="ttc" id="anamespacecom_1_1zibra_1_1smoke__and__fire_1_1_analytics_html"><div class="ttname"><a href="namespacecom_1_1zibra_1_1smoke__and__fire_1_1_analytics.html">com.zibra.smoke_and_fire.Analytics</a></div><div class="ttdef"><b>Definition:</b> <a href="_smoke_and_fire_analytics_8cs_source.html#l00016">SmokeAndFireAnalytics.cs:17</a></div></div>
<div class="ttc" id="anamespacecom_1_1zibra_1_1smoke__and__fire_1_1_bridge_html"><div class="ttname"><a href="namespacecom_1_1zibra_1_1smoke__and__fire_1_1_bridge.html">com.zibra.smoke_and_fire.Bridge</a></div><div class="ttdef"><b>Definition:</b> <a href="_smoke_and_fire_bridge_8cs_source.html#l00007">SmokeAndFireBridge.cs:8</a></div></div>
<div class="ttc" id="anamespacecom_1_1zibra_1_1smoke__and__fire_1_1_data_structures_html"><div class="ttname"><a href="namespacecom_1_1zibra_1_1smoke__and__fire_1_1_data_structures.html">com.zibra.smoke_and_fire.DataStructures</a></div><div class="ttdoc">Namespace that contains classes, main purpose of which is to store smoke &amp; fire parameters.</div><div class="ttdef"><b>Definition:</b> <a href="_namespace_documentation_8cs_source.html#l00125">NamespaceDocumentation.cs:126</a></div></div>
<div class="ttc" id="anamespacecom_1_1zibra_1_1smoke__and__fire_1_1_manipulators_html"><div class="ttname"><a href="namespacecom_1_1zibra_1_1smoke__and__fire_1_1_manipulators.html">com.zibra.smoke_and_fire.Manipulators</a></div><div class="ttdoc">Namespace that contains smoke &amp; fire manipulator classes.</div><div class="ttdef"><b>Definition:</b> <a href="_namespace_documentation_8cs_source.html#l00135">NamespaceDocumentation.cs:136</a></div></div>
<div class="ttc" id="anamespacecom_1_1zibra_1_1smoke__and__fire_1_1_solver_html"><div class="ttname"><a href="namespacecom_1_1zibra_1_1smoke__and__fire_1_1_solver.html">com.zibra.smoke_and_fire.Solver</a></div><div class="ttdoc">Namespace that contains main ZibraSmokeAndFire class with most of the simulation logic.</div><div class="ttdef"><b>Definition:</b> <a href="_namespace_documentation_8cs_source.html#l00142">NamespaceDocumentation.cs:143</a></div></div>
<div class="ttc" id="anamespacecom_1_1zibra_1_1smoke__and__fire_1_1_utilities_html"><div class="ttname"><a href="namespacecom_1_1zibra_1_1smoke__and__fire_1_1_utilities.html">com.zibra.smoke_and_fire.Utilities</a></div><div class="ttdef"><b>Definition:</b> <a href="_primitive_helper_8cs_source.html#l00004">PrimitiveHelper.cs:5</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.5
</small></address>
</body>
</html>
