/doc/symbols/src/src_Material.js.html
https://github.com/fossil/WebGLU · HTML · 218 lines · 218 code · 0 blank · 0 comment · 0 complexity · 5d5de6c2698cfb787888a8e979a147db MD5 · raw file
- <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
- .KEYW {color: #933;}
- .COMM {color: #bbb; font-style: italic;}
- .NUMB {color: #393;}
- .STRN {color: #393;}
- .REGX {color: #339;}
- .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
- </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/** @ignore Wrapper function to allow multifile or single file organization */</span><span class="WHIT">
- <span class='line'> 2</span> </span><span class="NAME">$W.initMaterial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 3</span>
- <span class='line'> 4</span> </span><span class="WHIT"> </span><span class="COMM">/* @class Creates a new material from the provided definition.
- <span class='line'> 5</span> * Definition is JS object (possibly loaded from JSON) in
- <span class='line'> 6</span> * the following format
- <span class='line'> 7</span> * {
- <span class='line'> 8</span> * name: "matName", // The name this material will be refered to by.
- <span class='line'> 9</span> * // Must be unique within this application
- <span class='line'> 10</span> *
- <span class='line'> 11</span> * program: {
- <span class='line'> 12</span> * name: "prgName", // If there already exists a shader program
- <span class='line'> 13</span> * // with this name, it will be used. Otherwise
- <span class='line'> 14</span> * // one will be created as defined here.
- <span class='line'> 15</span> * shaders: [ // List of shaders in this program.
- <span class='line'> 16</span> * // As with the program itself, if a shader with the
- <span class='line'> 17</span> * // given name already exists it will take precedence
- <span class='line'> 18</span> * // over creating a new shader.
- <span class='line'> 19</span> * {name: "FS", path: "FS.frag"},
- <span class='line'> 20</span> * {name: "VS", type: $W.GL.VERTEX_SHADER, source: "..."},
- <span class='line'> 21</span> * // etc.
- <span class='line'> 22</span> * ]
- <span class='line'> 23</span> * },
- <span class='line'> 24</span> *
- <span class='line'> 25</span> * textures: [
- <span class='line'> 26</span> * // type can be `Image`, `Video`, or `Canvas`
- <span class='line'> 27</span> * {name:"tex", type:"Image", path:"tex.jpg"},
- <span class='line'> 28</span> * // etc.
- <span class='line'> 29</span> * ]
- <span class='line'> 30</span> * }
- <span class='line'> 31</span> * or
- <span class='line'> 32</span> * {
- <span class='line'> 33</span> * path: "mat.json"
- <span class='line'> 34</span> * }
- <span class='line'> 35</span> * where mat.json is a file containing JSON in the first format
- <span class='line'> 36</span> */</span><span class="WHIT">
- <span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">$W.Material</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">materialDef</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 38</span>
- <span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">this.program</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">this.uniforms</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 42</span> </span><span class="WHIT"> </span><span class="NAME">this.attributes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">this.textures</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">this.framebuffer</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 45</span>
- <span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">this.setUniformAction</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">MAT_setUniformAction</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">action</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 47</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">uniform</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 48</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">this.uniforms.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 49</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.uniforms</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">uniform</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.uniforms</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 51</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'> 52</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'> 53</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">uniform</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
- <span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">uniform.action</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">action</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 55</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">console.warn</span><span class="PUNC">(</span><span class="STRN">"Cannot set uniform action for nonexistant uniform `"</span><span class="PUNC">+</span><span class="WHIT">
- <span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"`"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 58</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 60</span>
- <span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">this.setupUniforms</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">MAT_setupUniforms</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">this.uniforms</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">this.attributes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 64</span>
- <span class='line'> 65</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">this.program.uniforms.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">this.uniforms.push</span><span class="PUNC">(</span><span class="NAME">this.program.uniforms</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">clone</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 67</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'> 68</span>
- <span class='line'> 69</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">this.program.attributes.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 70</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">attrib</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.program.attributes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 71</span>
- <span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">attrib.location</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 73</span> </span><span class="WHIT"> </span><span class="NAME">this.attributes.push</span><span class="PUNC">(</span><span class="NAME">attrib.clone</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 74</span> </span><span class="WHIT"> </span><span class="NAME">$W.GL.enableVertexAttribArray</span><span class="PUNC">(</span><span class="NAME">attrib.location</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 75</span>
- <span class='line'> 76</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'> 77</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'> 78</span>
- <span class='line'> 79</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 80</span>
- <span class='line'> 81</span> </span><span class="WHIT"> </span><span class="NAME">this.setupTextureUniforms</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">MAT_setupTextureUniforms</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 82</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">this.textures.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 83</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">action</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">genMultiTextureAction</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 84</span> </span><span class="WHIT"> </span><span class="NAME">this.setUniformAction</span><span class="PUNC">(</span><span class="STRN">'wglu_mat_texture'</span><span class="PUNC">+</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">action</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 85</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'> 86</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 87</span>
- <span class='line'> 88</span> </span><span class="WHIT"> </span><span class="NAME">this.initFromDef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">MAT_initFromDef</span><span class="PUNC">(</span><span class="NAME">matDef</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 89</span> </span><span class="WHIT"> </span><span class="COMM">// If we've been provided a path, use that file.</span><span class="WHIT">
- <span class='line'> 90</span> </span><span class="WHIT"> </span><span class="COMM">// Allow for name override.</span><span class="WHIT">
- <span class='line'> 91</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">matDef.path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">matDef.name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 93</span> </span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">matDef.name</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 94</span> </span><span class="WHIT"> </span><span class="NAME">matDef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$W.util.loadFileAsJSON</span><span class="PUNC">(</span><span class="NAME">matDef.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 95</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'> 96</span> </span><span class="WHIT"> </span><span class="NAME">matDef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$W.util.loadFileAsJSON</span><span class="PUNC">(</span><span class="NAME">matDef.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 97</span> </span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">matDef.name</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'> 98</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'> 99</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>100</span> </span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">matDef.name</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>101</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'>102</span>
- <span class='line'>103</span> </span><span class="WHIT"> </span><span class="NAME">$W.log</span><span class="PUNC">(</span><span class="NAME">matDef.name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>104</span>
- <span class='line'>105</span> </span><span class="WHIT"> </span><span class="NAME">$W.log</span><span class="PUNC">(</span><span class="STRN">'creating material `'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'`'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>106</span> </span><span class="WHIT"> </span><span class="NAME">$W.indentLog</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>107</span>
- <span class='line'>108</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">initProgram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">MAT_initProgram</span><span class="PUNC">(</span><span class="NAME">prgDef</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>109</span> </span><span class="WHIT"> </span><span class="COMM">// If a program of the name specified in the material doesn't already</span><span class="WHIT">
- <span class='line'>110</span> </span><span class="WHIT"> </span><span class="COMM">// exist, create it with the specified parameters.</span><span class="WHIT">
- <span class='line'>111</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">program</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$W.programs</span><span class="PUNC">[</span><span class="NAME">prgDef.name</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>112</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">program</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>113</span>
- <span class='line'>114</span> </span><span class="WHIT"> </span><span class="NAME">program</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">$W.GLSL.ShaderProgram</span><span class="PUNC">(</span><span class="NAME">prgDef.name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>115</span>
- <span class='line'>116</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">prgDef.shaders.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>117</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">shaderDef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">prgDef.shaders</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>118</span>
- <span class='line'>119</span> </span><span class="WHIT"> </span><span class="COMM">// Load shader from file</span><span class="WHIT">
- <span class='line'>120</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">shaderDef.path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>121</span> </span><span class="WHIT"> </span><span class="NAME">program.attachShader</span><span class="PUNC">(</span><span class="NAME">shaderDef.name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">shaderDef.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>122</span>
- <span class='line'>123</span> </span><span class="WHIT"> </span><span class="COMM">// Load shader from source code</span><span class="WHIT">
- <span class='line'>124</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">shaderDef.source</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>125</span> </span><span class="WHIT"> </span><span class="NAME">program.attachShader</span><span class="PUNC">(</span><span class="NAME">shaderDef.name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">shaderDef.source</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">shaderDef.type</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>126</span>
- <span class='line'>127</span> </span><span class="WHIT"> </span><span class="COMM">// Load shader from embedded script</span><span class="WHIT">
- <span class='line'>128</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>129</span> </span><span class="WHIT"> </span><span class="NAME">program.attachShader</span><span class="PUNC">(</span><span class="NAME">shaderDef.id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>130</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'>131</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'>132</span> </span><span class="WHIT"> </span><span class="NAME">program.use</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>133</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'>134</span>
- <span class='line'>135</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">program</span><span class="WHIT">
- <span class='line'>136</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>137</span>
- <span class='line'>138</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">initTextures</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">MAT_initTextures</span><span class="PUNC">(</span><span class="NAME">texDef</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>139</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">textures</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
- <span class='line'>140</span>
- <span class='line'>141</span> </span><span class="WHIT"> </span><span class="COMM">// If textures specified in the material do not exist, create them.</span><span class="WHIT">
- <span class='line'>142</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">texDef</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>143</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">texDef.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>144</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">texDef</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>145</span>
- <span class='line'>146</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">$W.textures</span><span class="PUNC">[</span><span class="NAME">texture.name</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>147</span>
- <span class='line'>148</span> </span><span class="WHIT"> </span><span class="COMM">// type is Image, Canvas, or Video. this calls</span><span class="WHIT">
- <span class='line'>149</span> </span><span class="WHIT"> </span><span class="COMM">// ImageTexture, CanvasTexture or VideoTexture.</span><span class="WHIT">
- <span class='line'>150</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">texture.type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"Image"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>151</span> </span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">$W.ImageTexture</span><span class="PUNC">(</span><span class="NAME">texture.name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">texture.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>152</span>
- <span class='line'>153</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">texture.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"Canvas"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>154</span> </span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">$W.CanvasTexture</span><span class="PUNC">(</span><span class="NAME">texDef.name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
- <span class='line'>155</span> </span><span class="WHIT"> </span><span class="NAME">document.getElementById</span><span class="PUNC">(</span><span class="NAME">texture.element_id</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>156</span>
- <span class='line'>157</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">texture.type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"Video"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
- <span class='line'>158</span> </span><span class="WHIT"> </span><span class="WHIT">
- <span class='line'>159</span> </span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">$W.VideoTexture</span><span class="PUNC">(</span><span class="NAME">texture.name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">texture.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>160</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'>161</span>
- <span class='line'>162</span> </span><span class="WHIT"> </span><span class="NAME">textures.push</span><span class="PUNC">(</span><span class="NAME">texture.name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>163</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'>164</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'>165</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
- <span class='line'>166</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">textures</span><span class="WHIT">
- <span class='line'>167</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>168</span>
- <span class='line'>169</span> </span><span class="WHIT"> </span><span class="NAME">this.program</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">initProgram</span><span class="PUNC">(</span><span class="NAME">matDef.program</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>170</span> </span><span class="WHIT"> </span><span class="NAME">this.setupUniforms</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>171</span>
- <span class='line'>172</span> </span><span class="WHIT"> </span><span class="NAME">this.textures</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">initTextures</span><span class="PUNC">(</span><span class="NAME">matDef.textures</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>173</span> </span><span class="WHIT"> </span><span class="NAME">this.setupTextureUniforms</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>174</span>
- <span class='line'>175</span> </span><span class="WHIT"> </span><span class="NAME">$W.log</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>176</span>
- <span class='line'>177</span> </span><span class="WHIT"> </span><span class="NAME">$W.dedentLog</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>178</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>179</span>
- <span class='line'>180</span> </span><span class="WHIT"> </span><span class="NAME">this.initFromDef</span><span class="PUNC">(</span><span class="NAME">materialDef</span><span class="PUNC">)</span><span class="WHIT">
- <span class='line'>181</span>
- <span class='line'>182</span> </span><span class="WHIT"> </span><span class="NAME">$W.materials</span><span class="PUNC">[</span><span class="NAME">this.name</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>183</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>184</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
- <span class='line'>185</span>
- <span class='line'>186</span> </span><span class="COMM">/** @author Benjamin DeLillo */</span><span class="WHIT">
- <span class='line'>187</span> </span><span class="COMM">/*
- <span class='line'>188</span> * Copyright (c) 2009-2010 Benjamin P. DeLillo
- <span class='line'>189</span> *
- <span class='line'>190</span> * Permission is hereby granted, free of charge, to any person
- <span class='line'>191</span> * obtaining a copy of this software and associated documentation
- <span class='line'>192</span> * files (the "Software"), to deal in the Software without
- <span class='line'>193</span> * restriction, including without limitation the rights to use,
- <span class='line'>194</span> * copy, modify, merge, publish, distribute, sublicense, and/or sell
- <span class='line'>195</span> * copies of the Software, and to permit persons to whom the
- <span class='line'>196</span> * Software is furnished to do so, subject to the following
- <span class='line'>197</span> * conditions:
- <span class='line'>198</span> *
- <span class='line'>199</span> * The above copyright notice and this permission notice shall be
- <span class='line'>200</span> * included in all copies or substantial portions of the Software.
- <span class='line'>201</span> *
- <span class='line'>202</span> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- <span class='line'>203</span> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- <span class='line'>204</span> * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- <span class='line'>205</span> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- <span class='line'>206</span> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- <span class='line'>207</span> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- <span class='line'>208</span> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- <span class='line'>209</span> * OTHER DEALINGS IN THE SOFTWARE.
- <span class='line'>210</span> */</span><span class="WHIT">
- <span class='line'>211</span> </span></pre></body></html>