dreemgl
Version:
DreemGL is an open-source multi-screen prototyping framework for mediated environments, with a visual editor and shader styling for webGL and DALi runtimes written in JavaScript. As a toolkit for gpu-accelerated multiscreen development, DreemGL includes
876 lines (838 loc) • 49 kB
HTML
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CodeRay output</title>
<style type="text/css">
.CodeRay .line-numbers a {
text-decoration: inherit;
color: inherit;
}
body {
background-color: white;
padding: 0;
margin: 0;
}
.CodeRay {
background-color: hsl(0,0%,95%);
border: 1px solid silver;
color: black;
}
.CodeRay pre {
margin: 0px;
}
span.CodeRay { white-space: pre; border: 0px; padding: 2px; }
table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px; }
table.CodeRay td { padding: 2px 4px; vertical-align: top; }
.CodeRay .line-numbers {
background-color: hsl(180,65%,90%);
color: gray;
text-align: right;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.CodeRay .line-numbers a {
background-color: hsl(180,65%,90%) ;
color: gray ;
text-decoration: none ;
}
.CodeRay .line-numbers pre {
word-break: normal;
}
.CodeRay .line-numbers a:target { color: blue ; }
.CodeRay .line-numbers .highlighted { color: red ; }
.CodeRay .line-numbers .highlighted a { color: red ; }
.CodeRay span.line-numbers { padding: 0px 4px; }
.CodeRay .line { display: block; float: left; width: 100%; }
.CodeRay .code { width: 100%; }
.CodeRay .debug { color: white ; background: blue ; }
.CodeRay .annotation { color:#007 }
.CodeRay .attribute-name { color:#b48 }
.CodeRay .attribute-value { color:#700 }
.CodeRay .binary { color:#549 }
.CodeRay .binary .char { color:#325 }
.CodeRay .binary .delimiter { color:#325 }
.CodeRay .char { color:#D20 }
.CodeRay .char .content { color:#D20 }
.CodeRay .char .delimiter { color:#710 }
.CodeRay .class { color:#B06; font-weight:bold }
.CodeRay .class-variable { color:#369 }
.CodeRay .color { color:#0A0 }
.CodeRay .comment { color:#777 }
.CodeRay .comment .char { color:#444 }
.CodeRay .comment .delimiter { color:#444 }
.CodeRay .constant { color:#036; font-weight:bold }
.CodeRay .decorator { color:#B0B }
.CodeRay .definition { color:#099; font-weight:bold }
.CodeRay .delimiter { color:black }
.CodeRay .directive { color:#088; font-weight:bold }
.CodeRay .docstring { color:#D42; }
.CodeRay .doctype { color:#34b }
.CodeRay .done { text-decoration: line-through; color: gray }
.CodeRay .entity { color:#800; font-weight:bold }
.CodeRay .error { color:#F00; background-color:#FAA }
.CodeRay .escape { color:#666 }
.CodeRay .exception { color:#C00; font-weight:bold }
.CodeRay .float { color:#60E }
.CodeRay .function { color:#06B; font-weight:bold }
.CodeRay .function .delimiter { color:#024; font-weight:bold }
.CodeRay .global-variable { color:#d70 }
.CodeRay .hex { color:#02b }
.CodeRay .id { color:#33D; font-weight:bold }
.CodeRay .include { color:#B44; font-weight:bold }
.CodeRay .inline { background-color: hsla(0,0%,0%,0.07); color: black }
.CodeRay .inline-delimiter { font-weight: bold; color: #666 }
.CodeRay .instance-variable { color:#33B }
.CodeRay .integer { color:#00D }
.CodeRay .imaginary { color:#f00 }
.CodeRay .important { color:#D00 }
.CodeRay .key { color: #606 }
.CodeRay .key .char { color: #60f }
.CodeRay .key .delimiter { color: #404 }
.CodeRay .keyword { color:#080; font-weight:bold }
.CodeRay .label { color:#970; font-weight:bold }
.CodeRay .local-variable { color:#950 }
.CodeRay .map .content { color:#808 }
.CodeRay .map .delimiter { color:#40A}
.CodeRay .map { background-color:hsla(200,100%,50%,0.06); }
.CodeRay .namespace { color:#707; font-weight:bold }
.CodeRay .octal { color:#40E }
.CodeRay .operator { }
.CodeRay .predefined { color:#369; font-weight:bold }
.CodeRay .predefined-constant { color:#069 }
.CodeRay .predefined-type { color:#0a8; font-weight:bold }
.CodeRay .preprocessor { color:#579 }
.CodeRay .pseudo-class { color:#00C; font-weight:bold }
.CodeRay .regexp { background-color:hsla(300,100%,50%,0.06); }
.CodeRay .regexp .content { color:#808 }
.CodeRay .regexp .delimiter { color:#404 }
.CodeRay .regexp .modifier { color:#C2C }
.CodeRay .reserved { color:#080; font-weight:bold }
.CodeRay .shell { background-color:hsla(120,100%,50%,0.06); }
.CodeRay .shell .content { color:#2B2 }
.CodeRay .shell .delimiter { color:#161 }
.CodeRay .string { background-color:hsla(0,100%,50%,0.05); }
.CodeRay .string .char { color: #b0b }
.CodeRay .string .content { color: #D20 }
.CodeRay .string .delimiter { color: #710 }
.CodeRay .string .modifier { color: #E40 }
.CodeRay .symbol { color:#A60 }
.CodeRay .symbol .content { color:#A60 }
.CodeRay .symbol .delimiter { color:#740 }
.CodeRay .tag { color:#070; font-weight:bold }
.CodeRay .type { color:#339; font-weight:bold }
.CodeRay .value { color: #088 }
.CodeRay .variable { color:#037 }
.CodeRay .insert { background: hsla(120,100%,50%,0.12) }
.CodeRay .delete { background: hsla(0,100%,50%,0.12) }
.CodeRay .change { color: #bbf; background: #007 }
.CodeRay .head { color: #f8f; background: #505 }
.CodeRay .head .filename { color: white; }
.CodeRay .delete .eyecatcher { background-color: hsla(0,100%,50%,0.2); border: 1px solid hsla(0,100%,45%,0.5); margin: -1px; border-bottom: none; border-top-left-radius: 5px; border-top-right-radius: 5px; }
.CodeRay .insert .eyecatcher { background-color: hsla(120,100%,50%,0.2); border: 1px solid hsla(120,100%,25%,0.5); margin: -1px; border-top: none; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; }
.CodeRay .insert .insert { color: #0c0; background:transparent; font-weight:bold }
.CodeRay .delete .delete { color: #c00; background:transparent; font-weight:bold }
.CodeRay .change .change { color: #88f }
.CodeRay .head .head { color: #f4f }
.CodeRay {
border: none;
}
</style>
</head>
<body>
<table class="CodeRay"><tr>
<td class="line-numbers"><pre><a href="#n1" name="n1">1</a>
<a href="#n2" name="n2">2</a>
<a href="#n3" name="n3">3</a>
<a href="#n4" name="n4">4</a>
<a href="#n5" name="n5">5</a>
<a href="#n6" name="n6">6</a>
<a href="#n7" name="n7">7</a>
<a href="#n8" name="n8">8</a>
<a href="#n9" name="n9">9</a>
<strong><a href="#n10" name="n10">10</a></strong>
<a href="#n11" name="n11">11</a>
<a href="#n12" name="n12">12</a>
<a href="#n13" name="n13">13</a>
<a href="#n14" name="n14">14</a>
<a href="#n15" name="n15">15</a>
<a href="#n16" name="n16">16</a>
<a href="#n17" name="n17">17</a>
<a href="#n18" name="n18">18</a>
<a href="#n19" name="n19">19</a>
<strong><a href="#n20" name="n20">20</a></strong>
<a href="#n21" name="n21">21</a>
<a href="#n22" name="n22">22</a>
<a href="#n23" name="n23">23</a>
<a href="#n24" name="n24">24</a>
<a href="#n25" name="n25">25</a>
<a href="#n26" name="n26">26</a>
<a href="#n27" name="n27">27</a>
<a href="#n28" name="n28">28</a>
<a href="#n29" name="n29">29</a>
<strong><a href="#n30" name="n30">30</a></strong>
<a href="#n31" name="n31">31</a>
<a href="#n32" name="n32">32</a>
<a href="#n33" name="n33">33</a>
<a href="#n34" name="n34">34</a>
<a href="#n35" name="n35">35</a>
<a href="#n36" name="n36">36</a>
<a href="#n37" name="n37">37</a>
<a href="#n38" name="n38">38</a>
<a href="#n39" name="n39">39</a>
<strong><a href="#n40" name="n40">40</a></strong>
<a href="#n41" name="n41">41</a>
<a href="#n42" name="n42">42</a>
<a href="#n43" name="n43">43</a>
<a href="#n44" name="n44">44</a>
<a href="#n45" name="n45">45</a>
<a href="#n46" name="n46">46</a>
<a href="#n47" name="n47">47</a>
<a href="#n48" name="n48">48</a>
<a href="#n49" name="n49">49</a>
<strong><a href="#n50" name="n50">50</a></strong>
<a href="#n51" name="n51">51</a>
<a href="#n52" name="n52">52</a>
<a href="#n53" name="n53">53</a>
<a href="#n54" name="n54">54</a>
<a href="#n55" name="n55">55</a>
<a href="#n56" name="n56">56</a>
<a href="#n57" name="n57">57</a>
<a href="#n58" name="n58">58</a>
<a href="#n59" name="n59">59</a>
<strong><a href="#n60" name="n60">60</a></strong>
<a href="#n61" name="n61">61</a>
<a href="#n62" name="n62">62</a>
<a href="#n63" name="n63">63</a>
<a href="#n64" name="n64">64</a>
<a href="#n65" name="n65">65</a>
<a href="#n66" name="n66">66</a>
<a href="#n67" name="n67">67</a>
<a href="#n68" name="n68">68</a>
<a href="#n69" name="n69">69</a>
<strong><a href="#n70" name="n70">70</a></strong>
<a href="#n71" name="n71">71</a>
<a href="#n72" name="n72">72</a>
<a href="#n73" name="n73">73</a>
<a href="#n74" name="n74">74</a>
<a href="#n75" name="n75">75</a>
<a href="#n76" name="n76">76</a>
<a href="#n77" name="n77">77</a>
<a href="#n78" name="n78">78</a>
<a href="#n79" name="n79">79</a>
<strong><a href="#n80" name="n80">80</a></strong>
<a href="#n81" name="n81">81</a>
<a href="#n82" name="n82">82</a>
<a href="#n83" name="n83">83</a>
<a href="#n84" name="n84">84</a>
<a href="#n85" name="n85">85</a>
<a href="#n86" name="n86">86</a>
<a href="#n87" name="n87">87</a>
<a href="#n88" name="n88">88</a>
<a href="#n89" name="n89">89</a>
<strong><a href="#n90" name="n90">90</a></strong>
<a href="#n91" name="n91">91</a>
<a href="#n92" name="n92">92</a>
<a href="#n93" name="n93">93</a>
<a href="#n94" name="n94">94</a>
<a href="#n95" name="n95">95</a>
<a href="#n96" name="n96">96</a>
<a href="#n97" name="n97">97</a>
<a href="#n98" name="n98">98</a>
<a href="#n99" name="n99">99</a>
<strong><a href="#n100" name="n100">100</a></strong>
<a href="#n101" name="n101">101</a>
<a href="#n102" name="n102">102</a>
<a href="#n103" name="n103">103</a>
<a href="#n104" name="n104">104</a>
<a href="#n105" name="n105">105</a>
<a href="#n106" name="n106">106</a>
<a href="#n107" name="n107">107</a>
<a href="#n108" name="n108">108</a>
<a href="#n109" name="n109">109</a>
<strong><a href="#n110" name="n110">110</a></strong>
<a href="#n111" name="n111">111</a>
<a href="#n112" name="n112">112</a>
<a href="#n113" name="n113">113</a>
<a href="#n114" name="n114">114</a>
<a href="#n115" name="n115">115</a>
<a href="#n116" name="n116">116</a>
<a href="#n117" name="n117">117</a>
<a href="#n118" name="n118">118</a>
<a href="#n119" name="n119">119</a>
<strong><a href="#n120" name="n120">120</a></strong>
<a href="#n121" name="n121">121</a>
<a href="#n122" name="n122">122</a>
<a href="#n123" name="n123">123</a>
<a href="#n124" name="n124">124</a>
<a href="#n125" name="n125">125</a>
<a href="#n126" name="n126">126</a>
<a href="#n127" name="n127">127</a>
<a href="#n128" name="n128">128</a>
<a href="#n129" name="n129">129</a>
<strong><a href="#n130" name="n130">130</a></strong>
<a href="#n131" name="n131">131</a>
<a href="#n132" name="n132">132</a>
<a href="#n133" name="n133">133</a>
<a href="#n134" name="n134">134</a>
<a href="#n135" name="n135">135</a>
<a href="#n136" name="n136">136</a>
<a href="#n137" name="n137">137</a>
<a href="#n138" name="n138">138</a>
<a href="#n139" name="n139">139</a>
<strong><a href="#n140" name="n140">140</a></strong>
<a href="#n141" name="n141">141</a>
<a href="#n142" name="n142">142</a>
<a href="#n143" name="n143">143</a>
<a href="#n144" name="n144">144</a>
<a href="#n145" name="n145">145</a>
<a href="#n146" name="n146">146</a>
<a href="#n147" name="n147">147</a>
<a href="#n148" name="n148">148</a>
<a href="#n149" name="n149">149</a>
<strong><a href="#n150" name="n150">150</a></strong>
<a href="#n151" name="n151">151</a>
<a href="#n152" name="n152">152</a>
<a href="#n153" name="n153">153</a>
<a href="#n154" name="n154">154</a>
<a href="#n155" name="n155">155</a>
<a href="#n156" name="n156">156</a>
<a href="#n157" name="n157">157</a>
<a href="#n158" name="n158">158</a>
<a href="#n159" name="n159">159</a>
<strong><a href="#n160" name="n160">160</a></strong>
<a href="#n161" name="n161">161</a>
<a href="#n162" name="n162">162</a>
<a href="#n163" name="n163">163</a>
<a href="#n164" name="n164">164</a>
<a href="#n165" name="n165">165</a>
<a href="#n166" name="n166">166</a>
<a href="#n167" name="n167">167</a>
<a href="#n168" name="n168">168</a>
<a href="#n169" name="n169">169</a>
<strong><a href="#n170" name="n170">170</a></strong>
<a href="#n171" name="n171">171</a>
<a href="#n172" name="n172">172</a>
<a href="#n173" name="n173">173</a>
<a href="#n174" name="n174">174</a>
<a href="#n175" name="n175">175</a>
<a href="#n176" name="n176">176</a>
<a href="#n177" name="n177">177</a>
<a href="#n178" name="n178">178</a>
<a href="#n179" name="n179">179</a>
<strong><a href="#n180" name="n180">180</a></strong>
<a href="#n181" name="n181">181</a>
<a href="#n182" name="n182">182</a>
<a href="#n183" name="n183">183</a>
<a href="#n184" name="n184">184</a>
<a href="#n185" name="n185">185</a>
<a href="#n186" name="n186">186</a>
<a href="#n187" name="n187">187</a>
<a href="#n188" name="n188">188</a>
<a href="#n189" name="n189">189</a>
<strong><a href="#n190" name="n190">190</a></strong>
<a href="#n191" name="n191">191</a>
<a href="#n192" name="n192">192</a>
<a href="#n193" name="n193">193</a>
<a href="#n194" name="n194">194</a>
<a href="#n195" name="n195">195</a>
<a href="#n196" name="n196">196</a>
<a href="#n197" name="n197">197</a>
<a href="#n198" name="n198">198</a>
<a href="#n199" name="n199">199</a>
<strong><a href="#n200" name="n200">200</a></strong>
<a href="#n201" name="n201">201</a>
<a href="#n202" name="n202">202</a>
<a href="#n203" name="n203">203</a>
<a href="#n204" name="n204">204</a>
<a href="#n205" name="n205">205</a>
<a href="#n206" name="n206">206</a>
<a href="#n207" name="n207">207</a>
<a href="#n208" name="n208">208</a>
<a href="#n209" name="n209">209</a>
<strong><a href="#n210" name="n210">210</a></strong>
<a href="#n211" name="n211">211</a>
<a href="#n212" name="n212">212</a>
<a href="#n213" name="n213">213</a>
<a href="#n214" name="n214">214</a>
<a href="#n215" name="n215">215</a>
<a href="#n216" name="n216">216</a>
<a href="#n217" name="n217">217</a>
<a href="#n218" name="n218">218</a>
<a href="#n219" name="n219">219</a>
<strong><a href="#n220" name="n220">220</a></strong>
<a href="#n221" name="n221">221</a>
<a href="#n222" name="n222">222</a>
<a href="#n223" name="n223">223</a>
<a href="#n224" name="n224">224</a>
<a href="#n225" name="n225">225</a>
<a href="#n226" name="n226">226</a>
<a href="#n227" name="n227">227</a>
<a href="#n228" name="n228">228</a>
<a href="#n229" name="n229">229</a>
<strong><a href="#n230" name="n230">230</a></strong>
<a href="#n231" name="n231">231</a>
<a href="#n232" name="n232">232</a>
<a href="#n233" name="n233">233</a>
<a href="#n234" name="n234">234</a>
<a href="#n235" name="n235">235</a>
<a href="#n236" name="n236">236</a>
<a href="#n237" name="n237">237</a>
<a href="#n238" name="n238">238</a>
<a href="#n239" name="n239">239</a>
<strong><a href="#n240" name="n240">240</a></strong>
<a href="#n241" name="n241">241</a>
<a href="#n242" name="n242">242</a>
<a href="#n243" name="n243">243</a>
<a href="#n244" name="n244">244</a>
<a href="#n245" name="n245">245</a>
<a href="#n246" name="n246">246</a>
<a href="#n247" name="n247">247</a>
<a href="#n248" name="n248">248</a>
<a href="#n249" name="n249">249</a>
<strong><a href="#n250" name="n250">250</a></strong>
<a href="#n251" name="n251">251</a>
<a href="#n252" name="n252">252</a>
<a href="#n253" name="n253">253</a>
<a href="#n254" name="n254">254</a>
<a href="#n255" name="n255">255</a>
<a href="#n256" name="n256">256</a>
<a href="#n257" name="n257">257</a>
<a href="#n258" name="n258">258</a>
<a href="#n259" name="n259">259</a>
<strong><a href="#n260" name="n260">260</a></strong>
<a href="#n261" name="n261">261</a>
<a href="#n262" name="n262">262</a>
<a href="#n263" name="n263">263</a>
<a href="#n264" name="n264">264</a>
<a href="#n265" name="n265">265</a>
<a href="#n266" name="n266">266</a>
<a href="#n267" name="n267">267</a>
<a href="#n268" name="n268">268</a>
<a href="#n269" name="n269">269</a>
<strong><a href="#n270" name="n270">270</a></strong>
<a href="#n271" name="n271">271</a>
<a href="#n272" name="n272">272</a>
<a href="#n273" name="n273">273</a>
<a href="#n274" name="n274">274</a>
<a href="#n275" name="n275">275</a>
<a href="#n276" name="n276">276</a>
<a href="#n277" name="n277">277</a>
<a href="#n278" name="n278">278</a>
<a href="#n279" name="n279">279</a>
<strong><a href="#n280" name="n280">280</a></strong>
<a href="#n281" name="n281">281</a>
<a href="#n282" name="n282">282</a>
<a href="#n283" name="n283">283</a>
<a href="#n284" name="n284">284</a>
<a href="#n285" name="n285">285</a>
<a href="#n286" name="n286">286</a>
<a href="#n287" name="n287">287</a>
<a href="#n288" name="n288">288</a>
<a href="#n289" name="n289">289</a>
<strong><a href="#n290" name="n290">290</a></strong>
<a href="#n291" name="n291">291</a>
<a href="#n292" name="n292">292</a>
<a href="#n293" name="n293">293</a>
<a href="#n294" name="n294">294</a>
<a href="#n295" name="n295">295</a>
<a href="#n296" name="n296">296</a>
<a href="#n297" name="n297">297</a>
<a href="#n298" name="n298">298</a>
<a href="#n299" name="n299">299</a>
<strong><a href="#n300" name="n300">300</a></strong>
<a href="#n301" name="n301">301</a>
<a href="#n302" name="n302">302</a>
<a href="#n303" name="n303">303</a>
<a href="#n304" name="n304">304</a>
<a href="#n305" name="n305">305</a>
<a href="#n306" name="n306">306</a>
<a href="#n307" name="n307">307</a>
<a href="#n308" name="n308">308</a>
<a href="#n309" name="n309">309</a>
<strong><a href="#n310" name="n310">310</a></strong>
<a href="#n311" name="n311">311</a>
<a href="#n312" name="n312">312</a>
<a href="#n313" name="n313">313</a>
<a href="#n314" name="n314">314</a>
<a href="#n315" name="n315">315</a>
<a href="#n316" name="n316">316</a>
<a href="#n317" name="n317">317</a>
<a href="#n318" name="n318">318</a>
<a href="#n319" name="n319">319</a>
<strong><a href="#n320" name="n320">320</a></strong>
<a href="#n321" name="n321">321</a>
<a href="#n322" name="n322">322</a>
<a href="#n323" name="n323">323</a>
<a href="#n324" name="n324">324</a>
<a href="#n325" name="n325">325</a>
<a href="#n326" name="n326">326</a>
<a href="#n327" name="n327">327</a>
<a href="#n328" name="n328">328</a>
<a href="#n329" name="n329">329</a>
<strong><a href="#n330" name="n330">330</a></strong>
<a href="#n331" name="n331">331</a>
<a href="#n332" name="n332">332</a>
<a href="#n333" name="n333">333</a>
<a href="#n334" name="n334">334</a>
<a href="#n335" name="n335">335</a>
<a href="#n336" name="n336">336</a>
<a href="#n337" name="n337">337</a>
<a href="#n338" name="n338">338</a>
<a href="#n339" name="n339">339</a>
<strong><a href="#n340" name="n340">340</a></strong>
<a href="#n341" name="n341">341</a>
<a href="#n342" name="n342">342</a>
<a href="#n343" name="n343">343</a>
<a href="#n344" name="n344">344</a>
<a href="#n345" name="n345">345</a>
<a href="#n346" name="n346">346</a>
<a href="#n347" name="n347">347</a>
<a href="#n348" name="n348">348</a>
<a href="#n349" name="n349">349</a>
<strong><a href="#n350" name="n350">350</a></strong>
<a href="#n351" name="n351">351</a>
<a href="#n352" name="n352">352</a>
<a href="#n353" name="n353">353</a>
<a href="#n354" name="n354">354</a>
<a href="#n355" name="n355">355</a>
<a href="#n356" name="n356">356</a>
<a href="#n357" name="n357">357</a>
<a href="#n358" name="n358">358</a>
</pre></td>
<td class="code"><pre><span class="comment">/* DreemGL is a collaboration between Teeming Society & Samsung Electronics, sponsored by Samsung and others.
Copyright 2015-2016 Teeming Society. Licensed under the Apache License, Version 2.0 (the "License"); You may not use this file except in compliance with the License.
You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.*/</span>
<span class="comment">// inspired by Seriously awesome GLSL noise functions. Stefan Gustavson, Ian McEwan Ashima Arts</span>
define(<span class="keyword">function</span>(require, exports){
exports.<span class="function">permute1</span> = <span class="keyword">function</span>(x){
<span class="keyword">return</span> mod((<span class="float">34.0</span> * x + <span class="float">1.0</span>) * x, <span class="float">289.0</span>)
}
exports.<span class="function">permute3</span> = <span class="keyword">function</span>(x){
<span class="keyword">return</span> mod((<span class="float">34.0</span> * x + <span class="float">1.0</span>) * x, <span class="float">289.0</span>)
}
exports.<span class="function">permute4</span> = <span class="keyword">function</span>(x){
<span class="keyword">return</span> mod((<span class="float">34.0</span> * x + <span class="float">1.0</span>) * x, <span class="float">289.0</span>)
}
exports.<span class="function">isqrtT1</span> = <span class="keyword">function</span>(r){
<span class="keyword">return</span> <span class="float">1.79284291400159</span> - <span class="float">0.85373472095314</span> * r
}
exports.<span class="function">isqrtT4</span> = <span class="keyword">function</span>(r){
<span class="keyword">return</span> vec4(<span class="float">1.79284291400159</span> - <span class="float">0.85373472095314</span> * r)
}
exports.<span class="function">snoise2</span> = <span class="keyword">function</span>(x, y){
<span class="keyword">return</span> snoise2v(vec2(x,y,z))
}
exports.<span class="function">cheapnoise</span> = <span class="keyword">function</span>(inp){
<span class="keyword">return</span> fract(sin(dot(inp.xy ,vec2(<span class="float">12.9898</span>,<span class="float">78.233</span>))) * <span class="float">43758.5453</span>);
}
exports.noise2d =
exports.s2d =
exports.<span class="function">snoise2v</span> = <span class="keyword">function</span>(v){
<span class="keyword">var</span> C = vec4(<span class="float">0.211324865405187</span>,<span class="float">0.366025403784439</span>,-<span class="float">0.577350269189626</span>,<span class="float">0.024390243902439</span>)
<span class="keyword">var</span> i = floor(v + dot(v, C.yy) )
<span class="keyword">var</span> x0 = v - i + dot(i, C.xx)
<span class="keyword">var</span> i1 = (x0.x > x0.y) ? vec2(<span class="float">1.0</span>, <span class="float">0.0</span>) : vec2(<span class="float">0.0</span>, <span class="float">1.0</span>)
<span class="keyword">var</span> x12 = x0.xyxy + C.xxzz
x12.xy -= i1
i = mod(i, <span class="float">289.0</span>) <span class="comment">// Avoid truncation effects in permutation</span>
<span class="keyword">var</span> p = permute3(permute3(i.y + vec3(<span class="float">0.0</span>, i1.y, <span class="float">1.0</span>)) + i.x + vec3(<span class="float">0.0</span>, i1.x, <span class="float">1.0</span> ))
<span class="keyword">var</span> m = max(<span class="float">0.5</span> - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), <span class="float">0.0</span>)
m = m*m
m = m*m
<span class="keyword">var</span> x = <span class="float">2.0</span> * fract(p * C.www) - <span class="float">1.0</span>
<span class="keyword">var</span> h = abs(x) - <span class="float">0.5</span>
<span class="keyword">var</span> ox = floor(x + <span class="float">0.5</span>)
<span class="keyword">var</span> a0 = x - ox
m *= (<span class="float">1.79284291400159</span> - <span class="float">0.85373472095314</span> * ( a0*a0 + h*h ))
<span class="keyword">var</span> g = vec3()
g.x = a0.x * x0.x + h.x * x0.y
g.yz = a0.yz * x12.xz + h.yz * x12.yw
<span class="keyword">return</span> <span class="float">130.0</span> * dot(m, g)
}
exports.<span class="function">snoise3</span> = <span class="keyword">function</span>(x, y, z){
<span class="keyword">return</span> snoise3v(vec3(x,y,z))
}
exports.noise3d =
exports.<span class="function">snoise3v</span> = <span class="keyword">function</span>(v){
<span class="keyword">var</span> C = vec2(<span class="float">1.0</span>/<span class="float">6.0</span>, <span class="float">1.0</span>/<span class="float">3.0</span>)
<span class="keyword">var</span> D = vec4(<span class="float">0.0</span>, <span class="float">0.5</span>, <span class="float">1.0</span>, <span class="float">2.0</span>)
<span class="comment">// First corner</span>
<span class="keyword">var</span> i = floor(v + dot(v, C.yyy))
<span class="keyword">var</span> x0 = v - i + dot(i, C.xxx)
<span class="keyword">var</span> g = step(x0.yzx, x0.xyz)
<span class="keyword">var</span> l = <span class="float">1.0</span> - g
<span class="keyword">var</span> i1 = min(g.xyz, l.zxy)
<span class="keyword">var</span> i2 = max(g.xyz, l.zxy)
<span class="keyword">var</span> x1 = x0 - i1 + <span class="float">1.0</span> * C.xxx
<span class="keyword">var</span> x2 = x0 - i2 + <span class="float">2.0</span> * C.xxx
<span class="keyword">var</span> x3 = x0 - <span class="integer">1</span>. + <span class="float">3.0</span> * C.xxx
<span class="comment">// Permutations</span>
i = mod(i, <span class="float">289.0</span>)
<span class="keyword">var</span> p = permute4(permute4(permute4(
i.z + vec4(<span class="float">0.0</span>, i1.z, i2.z, <span class="float">1.0</span>))
+ i.y + vec4(<span class="float">0.0</span>, i1.y, i2.y, <span class="float">1.0</span>))
+ i.x + vec4(<span class="float">0.0</span>, i1.x, i2.x, <span class="float">1.0</span>))
<span class="comment">// ( N*N points uniformly over a square, mapped onto an octahedron.)</span>
<span class="keyword">var</span> n_ = <span class="float">1.0</span>/<span class="float">7.0</span>
<span class="keyword">var</span> ns = n_ * D.wyz - D.xzx
<span class="keyword">var</span> j = p - <span class="float">49.0</span> * floor(p * ns.z *ns.z)
<span class="keyword">var</span> x_ = floor(j * ns.z)
<span class="keyword">var</span> y_ = floor(j - <span class="float">7.0</span> * x_)
<span class="keyword">var</span> x = x_ * ns.x + ns.yyyy
<span class="keyword">var</span> y = y_ * ns.x + ns.yyyy
<span class="keyword">var</span> h = <span class="float">1.0</span> - abs(x) - abs(y)
<span class="keyword">var</span> b0 = vec4( x.xy, y.xy )
<span class="keyword">var</span> b1 = vec4( x.zw, y.zw )
<span class="keyword">var</span> s0 = floor(b0)*<span class="float">2.0</span> + <span class="float">1.0</span>
<span class="keyword">var</span> s1 = floor(b1)*<span class="float">2.0</span> + <span class="float">1.0</span>
<span class="keyword">var</span> sh = -step(h, vec4(<span class="float">0.0</span>))
<span class="keyword">var</span> a0 = b0.xzyw + s0.xzyw*sh.xxyy
<span class="keyword">var</span> a1 = b1.xzyw + s1.xzyw*sh.zzww
<span class="keyword">var</span> p0 = vec3(a0.xy, h.x)
<span class="keyword">var</span> p1 = vec3(a0.zw, h.y)
<span class="keyword">var</span> p2 = vec3(a1.xy, h.z)
<span class="keyword">var</span> p3 = vec3(a1.zw, h.w)
<span class="comment">//Normalise gradients</span>
<span class="keyword">var</span> norm = isqrtT4(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)))
p0 *= norm.x;
p1 *= norm.y;
p2 *= norm.z;
p3 *= norm.w;
<span class="comment">// Mix final noise value</span>
<span class="keyword">var</span> m = max(<span class="float">0.6</span> - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), <span class="float">0.0</span>)
m = m * m
<span class="keyword">return</span> <span class="float">42.0</span> * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),
dot(p2,x2), dot(p3,x3) ) )
}
exports.<span class="function">snoise4_g</span> = <span class="keyword">function</span>(j, ip){
<span class="keyword">var</span> p = vec4()
p.xyz = floor( fract (vec3(j) * ip.xyz) * <span class="float">7.0</span>) * ip.z - <span class="float">1.0</span>
p.w = <span class="float">1.5</span> - dot(abs(p.xyz), vec3(<span class="float">1.0</span>,<span class="float">1.0</span>,<span class="float">1.0</span>))
<span class="keyword">var</span> s = vec4(lessThan(p, vec4(<span class="float">0.0</span>)))
p.xyz = p.xyz + (s.xyz*<span class="float">2.0</span> - <span class="float">1.0</span>) * s.www
<span class="keyword">return</span> p
}
exports.<span class="function">snoise4</span> = <span class="keyword">function</span>(x, y, z, w){
<span class="keyword">return</span> snoise4v(vec4(x,y,z,w))
}
exports.<span class="function">snoise4v</span> = <span class="keyword">function</span>(v){
<span class="keyword">var</span> C = vec4(<span class="float">0.138196601125011</span>,<span class="float">0.276393202250021</span>,<span class="float">0.414589803375032</span>,-<span class="float">0.447213595499958</span>)
<span class="comment">// First corner</span>
<span class="keyword">var</span> i = floor(v + dot(v, vec4(<span class="float">0.309016994374947451</span>)) )
<span class="keyword">var</span> x0 = v - i + dot(i, C.xxxx)
<span class="keyword">var</span> i0 = vec4()
<span class="keyword">var</span> isX = step( x0.yzw, x0.xxx )
<span class="keyword">var</span> isYZ = step( x0.zww, x0.yyz )
i0.x = isX.x + isX.y + isX.z
i0.yzw = <span class="float">1.0</span> - isX
i0.y += isYZ.x + isYZ.y
i0.zw += <span class="float">1.0</span> - isYZ.xy
i0.z += isYZ.z
i0.w += <span class="float">1.0</span> - isYZ.z
<span class="keyword">var</span> i3 = clamp( i0, <span class="float">0.0</span>, <span class="float">1.0</span> )
<span class="keyword">var</span> i2 = clamp( i0-<span class="float">1.0</span>, <span class="float">0.0</span>, <span class="float">1.0</span> )
<span class="keyword">var</span> i1 = clamp( i0-<span class="float">2.0</span>, <span class="float">0.0</span>, <span class="float">1.0</span> )
<span class="keyword">var</span> x1 = x0 - i1 + C.xxxx
<span class="keyword">var</span> x2 = x0 - i2 + C.yyyy
<span class="keyword">var</span> x3 = x0 - i3 + C.zzzz
<span class="keyword">var</span> x4 = x0 + C.wwww
<span class="comment">// Permutations</span>
i = mod(i, <span class="float">289.0</span> )
<span class="keyword">var</span> j0 = permute1( permute1( permute1( permute1(i.w) + i.z) + i.y) + i.x)
<span class="keyword">var</span> j1 = permute4( permute4( permute4( permute4(
i.w + vec4(i1.w, i2.w, i3.w, <span class="float">1.0</span> ))
+ i.z + vec4(i1.z, i2.z, i3.z, <span class="float">1.0</span> ))
+ i.y + vec4(i1.y, i2.y, i3.y, <span class="float">1.0</span> ))
+ i.x + vec4(i1.x, i2.x, i3.x, <span class="float">1.0</span> ))
<span class="comment">// Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope</span>
<span class="comment">// 7*7*6 = 294, which is close to the ring size 17*17 = 289.</span>
<span class="keyword">var</span> ip = vec4(<span class="float">1.0</span>/<span class="float">294.0</span>, <span class="float">1.0</span>/<span class="float">49.0</span>, <span class="float">1.0</span>/<span class="float">7.0</span>, <span class="float">0.0</span>)
<span class="keyword">var</span> p0 = snoise4_g(j0, ip)
<span class="keyword">var</span> p1 = snoise4_g(j1.x, ip)
<span class="keyword">var</span> p2 = snoise4_g(j1.y, ip)
<span class="keyword">var</span> p3 = snoise4_g(j1.z, ip)
<span class="keyword">var</span> p4 = snoise4_g(j1.w, ip)
<span class="comment">// Normalise gradients</span>
<span class="keyword">var</span> nr = isqrtT4(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)))
p0 *= nr.x
p1 *= nr.y
p2 *= nr.z
p3 *= nr.w
p4 *= isqrtT1(dot(p4,p4))
<span class="comment">// Mix contributions from the five corners</span>
<span class="keyword">var</span> m0 = max(<span class="float">0.6</span> - vec3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), <span class="float">0.0</span>)
<span class="keyword">var</span> m1 = max(<span class="float">0.6</span> - vec2(dot(x3,x3), dot(x4,x4)), <span class="float">0.0</span>)
m0 = m0 * m0
m1 = m1 * m1
<span class="keyword">return</span> <span class="float">49.0</span> * (dot(m0*m0, vec3(dot( p0, x0 ), dot(p1, x1), dot(p2, x2)))
+ dot(m1*m1, vec2( dot(p3, x3), dot(p4, x4))))
}
exports.<span class="function">cell2v</span> = <span class="keyword">function</span>(v){
<span class="keyword">return</span> cell3v(vec3(v.x, v.y,<span class="integer">0</span>))
}
exports.<span class="function">cell3v</span> = <span class="keyword">function</span>(P){
<span class="keyword">var</span> K = <span class="float">0.142857142857</span> <span class="comment">// 1/7</span>
<span class="keyword">var</span> Ko = <span class="float">0.428571428571</span> <span class="comment">// 1/2-K/2</span>
<span class="keyword">var</span> K2 = <span class="float">0.020408163265306</span> <span class="comment">// 1/(7*7)</span>
<span class="keyword">var</span> Kz = <span class="float">0.166666666667</span> <span class="comment">// 1/6</span>
<span class="keyword">var</span> Kzo = <span class="float">0.416666666667</span> <span class="comment">// 1/2-1/6*2</span>
<span class="keyword">var</span> ji = <span class="float">0.8</span> <span class="comment">// smaller jitter gives less errors in F2</span>
<span class="keyword">var</span> Pi = mod(floor(P), <span class="float">289.0</span>)
<span class="keyword">var</span> Pf = fract(P)
<span class="keyword">var</span> Pfx = Pf.x + vec4(<span class="float">0.0</span>, -<span class="float">1.0</span>, <span class="float">0.0</span>, -<span class="float">1.0</span>)
<span class="keyword">var</span> Pfy = Pf.y + vec4(<span class="float">0.0</span>, <span class="float">0.0</span>, -<span class="float">1.0</span>, -<span class="float">1.0</span>)
<span class="keyword">var</span> p = permute4(Pi.x + vec4(<span class="float">0.0</span>, <span class="float">1.0</span>, <span class="float">0.0</span>, <span class="float">1.0</span>))
p = permute4(p + Pi.y + vec4(<span class="float">0.0</span>, <span class="float">0.0</span>, <span class="float">1.0</span>, <span class="float">1.0</span>))
<span class="keyword">var</span> p1 = permute4(p + Pi.z) <span class="comment">// z+0</span>
<span class="keyword">var</span> p2 = permute4(p + Pi.z + vec4(<span class="float">1.0</span>)) <span class="comment">// z+1</span>
<span class="keyword">var</span> ox1 = fract(p1*K) - Ko
<span class="keyword">var</span> oy1 = mod(floor(p1*K), <span class="float">7.0</span>)*K - Ko
<span class="keyword">var</span> oz1 = floor(p1*K2)*Kz - Kzo <span class="comment">// p1 < 289 guaranteed</span>
<span class="keyword">var</span> ox2 = fract(p2*K) - Ko
<span class="keyword">var</span> oy2 = mod(floor(p2*K), <span class="float">7.0</span>)*K - Ko
<span class="keyword">var</span> oz2 = floor(p2*K2)*Kz - Kzo
<span class="keyword">var</span> dx1 = Pfx + ji*ox1
<span class="keyword">var</span> dy1 = Pfy + ji*oy1
<span class="keyword">var</span> dz1 = Pf.z + ji*oz1
<span class="keyword">var</span> dx2 = Pfx + ji*ox2
<span class="keyword">var</span> dy2 = Pfy + ji*oy2
<span class="keyword">var</span> dz2 = Pf.z - <span class="float">1.0</span> + ji*oz2
<span class="keyword">var</span> d1 = dx1 * dx1 + dy1 * dy1 + dz1 * dz1 <span class="comment">// z+0</span>
<span class="keyword">var</span> d2 = dx2 * dx2 + dy2 * dy2 + dz2 * dz2 <span class="comment">// z+1</span>
<span class="keyword">var</span> d = min(d1,d2) <span class="comment">// F1 is now in d</span>
d2 = max(d1,d2) <span class="comment">// Make sure we keep all candidates for F2</span>
d.xy = (d.x < d.y) ? d.xy : d.yx <span class="comment">// Swap smallest to d.x</span>
d.xz = (d.x < d.z) ? d.xz : d.zx
d.xw = (d.x < d.w) ? d.xw : d.wx <span class="comment">// F1 is now in d.x</span>
d.yzw = min(d.yzw, d2.yzw) <span class="comment">// F2 now not in d2.yzw</span>
d.y = min(d.y, d.z) <span class="comment">// nor in d.z</span>
d.y = min(d.y, d.w) <span class="comment">// nor in d.w</span>
d.y = min(d.y, d2.x) <span class="comment">// F2 is now in d.y</span>
<span class="keyword">return</span> sqrt(d.xy) <span class="comment">// F1 and F2</span>
},
exports.<span class="function">cell3w</span> = <span class="keyword">function</span>(P){
<span class="keyword">var</span> K = <span class="float">0.142857142857</span>
<span class="keyword">var</span> Ko = <span class="float">0.428571428571</span> <span class="comment">// 1/2-K/2</span>
<span class="keyword">var</span> K2 = <span class="float">0.020408163265306</span><span class="comment">// 1/(7*7)</span>
<span class="keyword">var</span> Kz = <span class="float">0.166666666667</span><span class="comment">// 1/6</span>
<span class="keyword">var</span> Kzo = <span class="float">0.416666666667</span><span class="comment">// 1/2-1/6*2</span>
<span class="keyword">var</span> ji = <span class="float">1.0</span><span class="comment">// smaller jitter gives more regular pattern</span>
<span class="keyword">var</span> Pi = mod(floor(P), <span class="float">289.0</span>)
<span class="keyword">var</span> Pf = fract(P) - <span class="float">0.5</span>
<span class="keyword">var</span> Pfx = Pf.x + vec3(<span class="float">1.0</span>, <span class="float">0.0</span>, -<span class="float">1.0</span>)
<span class="keyword">var</span> Pfy = Pf.y + vec3(<span class="float">1.0</span>, <span class="float">0.0</span>, -<span class="float">1.0</span>)
<span class="keyword">var</span> Pfz = Pf.z + vec3(<span class="float">1.0</span>, <span class="float">0.0</span>, -<span class="float">1.0</span>)
<span class="keyword">var</span> p = permute3(Pi.x + vec3(-<span class="float">1.0</span>, <span class="float">0.0</span>, <span class="float">1.0</span>))
<span class="keyword">var</span> p1 = permute3(p + Pi.y - <span class="float">1.0</span>)
<span class="keyword">var</span> p2 = permute3(p + Pi.y)
<span class="keyword">var</span> p3 = permute3(p + Pi.y + <span class="float">1.0</span>)
<span class="keyword">var</span> p11 = permute3(p1 + Pi.z - <span class="float">1.0</span>)
<span class="keyword">var</span> p12 = permute3(p1 + Pi.z)
<span class="keyword">var</span> p13 = permute3(p1 + Pi.z + <span class="float">1.0</span>)
<span class="keyword">var</span> p21 = permute3(p2 + Pi.z - <span class="float">1.0</span>)
<span class="keyword">var</span> p22 = permute3(p2 + Pi.z)
<span class="keyword">var</span> p23 = permute3(p2 + Pi.z + <span class="float">1.0</span>)
<span class="keyword">var</span> p31 = permute3(p3 + Pi.z - <span class="float">1.0</span>)
<span class="keyword">var</span> p32 = permute3(p3 + Pi.z)
<span class="keyword">var</span> p33 = permute3(p3 + Pi.z + <span class="float">1.0</span>)
<span class="keyword">var</span> ox11 = fract(p11*K) - Ko
<span class="keyword">var</span> oy11 = mod(floor(p11*K), <span class="float">7.0</span>)*K - Ko
<span class="keyword">var</span> oz11 = floor(p11*K2)*Kz - Kzo <span class="comment">// p11 < 289 guaranteed</span>
<span class="keyword">var</span> ox12 = fract(p12*K) - Ko
<span class="keyword">var</span> oy12 = mod(floor(p12*K), <span class="float">7.0</span>)*K - Ko
<span class="keyword">var</span> oz12 = floor(p12*K2)*Kz - Kzo
<span class="keyword">var</span> ox13 = fract(p13*K) - Ko
<span class="keyword">var</span> oy13 = mod(floor(p13*K), <span class="float">7.0</span>)*K - Ko
<span class="keyword">var</span> oz13 = floor(p13*K2)*Kz - Kzo
<span class="keyword">var</span> ox21 = fract(p21*K) - Ko
<span class="keyword">var</span> oy21 = mod(floor(p21*K), <span class="float">7.0</span>)*K - Ko
<span class="keyword">var</span> oz21 = floor(p21*K2)*Kz - Kzo
<span class="keyword">var</span> ox22 = fract(p22*K) - Ko
<span class="keyword">var</span> oy22 = mod(floor(p22*K), <span class="float">7.0</span>)*K - Ko
<span class="keyword">var</span> oz22 = floor(p22*K2)*Kz - Kzo
<span class="keyword">var</span> ox23 = fract(p23*K) - Ko
<span class="keyword">var</span> oy23 = mod(floor(p23*K), <span class="float">7.0</span>)*K - Ko
<span class="keyword">var</span> oz23 = floor(p23*K2)*Kz - Kzo
<span class="keyword">var</span> ox31 = fract(p31*K) - Ko
<span class="keyword">var</span> oy31 = mod(floor(p31*K), <span class="float">7.0</span>)*K - Ko
<span class="keyword">var</span> oz31 = floor(p31*K2)*Kz - Kzo
<span class="keyword">var</span> ox32 = fract(p32*K) - Ko
<span class="keyword">var</span> oy32 = mod(floor(p32*K), <span class="float">7.0</span>)*K - Ko
<span class="keyword">var</span> oz32 = floor(p32*K2)*Kz - Kzo
<span class="keyword">var</span> ox33 = fract(p33*K) - Ko
<span class="keyword">var</span> oy33 = mod(floor(p33*K), <span class="float">7.0</span>)*K - Ko
<span class="keyword">var</span> oz33 = floor(p33*K2)*Kz - Kzo
<span class="keyword">var</span> dx11 = Pfx + ji*ox11
<span class="keyword">var</span> dy11 = Pfy.x + ji*oy11
<span class="keyword">var</span> dz11 = Pfz.x + ji*oz11
<span class="keyword">var</span> dx12 = Pfx + ji*ox12
<span class="keyword">var</span> dy12 = Pfy.x + ji*oy12
<span class="keyword">var</span> dz12 = Pfz.y + ji*oz12
<span class="keyword">var</span> dx13 = Pfx + ji*ox13
<span class="keyword">var</span> dy13 = Pfy.x + ji*oy13
<span class="keyword">var</span> dz13 = Pfz.z + ji*oz13
<span class="keyword">var</span> dx21 = Pfx + ji*ox21
<span class="keyword">var</span> dy21 = Pfy.y + ji*oy21
<span class="keyword">var</span> dz21 = Pfz.x + ji*oz21
<span class="keyword">var</span> dx22 = Pfx + ji*ox22
<span class="keyword">var</span> dy22 = Pfy.y + ji*oy22
<span class="keyword">var</span> dz22 = Pfz.y + ji*oz22
<span class="keyword">var</span> dx23 = Pfx + ji*ox23
<span class="keyword">var</span> dy23 = Pfy.y + ji*oy23
<span class="keyword">var</span> dz23 = Pfz.z + ji*oz23
<span class="keyword">var</span> dx31 = Pfx + ji*ox31
<span class="keyword">var</span> dy31 = Pfy.z + ji*oy31
<span class="keyword">var</span> dz31 = Pfz.x + ji*oz31
<span class="keyword">var</span> dx32 = Pfx + ji*ox32
<span class="keyword">var</span> dy32 = Pfy.z + ji*oy32
<span class="keyword">var</span> dz32 = Pfz.y + ji*oz32
<span class="keyword">var</span> dx33 = Pfx + ji*ox33
<span class="keyword">var</span> dy33 = Pfy.z + ji*oy33
<span class="keyword">var</span> dz33 = Pfz.z + ji*oz33
<span class="keyword">var</span> d11 = dx11 * dx11 + dy11 * dy11 + dz11 * dz11
<span class="keyword">var</span> d12 = dx12 * dx12 + dy12 * dy12 + dz12 * dz12
<span class="keyword">var</span> d13 = dx13 * dx13 + dy13 * dy13 + dz13 * dz13
<span class="keyword">var</span> d21 = dx21 * dx21 + dy21 * dy21 + dz21 * dz21
<span class="keyword">var</span> d22 = dx22 * dx22 + dy22 * dy22 + dz22 * dz22
<span class="keyword">var</span> d23 = dx23 * dx23 + dy23 * dy23 + dz23 * dz23
<span class="keyword">var</span> d31 = dx31 * dx31 + dy31 * dy31 + dz31 * dz31
<span class="keyword">var</span> d32 = dx32 * dx32 + dy32 * dy32 + dz32 * dz32
<span class="keyword">var</span> d33 = dx33 * dx33 + dy33 * dy33 + dz33 * dz33
<span class="keyword">var</span> d1a = min(d11, d12)
d12 = max(d11, d12)
d11 = min(d1a, d13) <span class="comment">// Smallest now not in d12 or d13</span>
d13 = max(d1a, d13)
d12 = min(d12, d13) <span class="comment">// 2nd smallest now not in d13</span>
<span class="keyword">var</span> d2a = min(d21, d22)
d22 = max(d21, d22)
d21 = min(d2a, d23) <span class="comment">// Smallest now not in d22 or d23</span>
d23 = max(d2a, d23)
d22 = min(d22, d23) <span class="comment">// 2nd smallest now not in d23</span>
<span class="keyword">var</span> d3a = min(d31, d32)
d32 = max(d31, d32)
d31 = min(d3a, d33) <span class="comment">// Smallest now not in d32 or d33</span>
d33 = max(d3a, d33)
d32 = min(d32, d33) <span class="comment">// 2nd smallest now not in d33</span>
<span class="keyword">var</span> da = min(d11, d21)
d21 = max(d11, d21)
d11 = min(da, d31) <span class="comment">// Smallest now in d11</span>
d31 = max(da, d31) <span class="comment">// 2nd smallest now not in d31</span>
d11.xy = (d11.x < d11.y) ? d11.xy : d11.yx
d11.xz = (d11.x < d11.z) ? d11.xz : d11.zx <span class="comment">// d11.x now smallest</span>
d12 = min(d12, d21) <span class="comment">// 2nd smallest now not in d21</span>
d12 = min(d12, d22) <span class="comment">// nor in d22</span>
d12 = min(d12, d31) <span class="comment">// nor in d31</span>
d12 = min(d12, d32) <span class="comment">// nor in d32</span>
d11.yz = min(d11.yz, d12.xy) <span class="comment">// nor in d12.yz</span>
d11.y = min(d11.y, d12.z) <span class="comment">// Only two more to go</span>
d11.y = min(d11.y, d11.z) <span class="comment">// Done! (Phew!)</span>
<span class="keyword">return</span> sqrt(d11.xy) <span class="comment">// F1, F2</span>
}
})</pre></td>
</tr></table>
</body>
</html>