@vpmedia/phaser 1.81.0 → 1.83.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +2 -2
  2. package/coverage/{lcov-report/block-navigation.js → block-navigation.js} +1 -1
  3. package/coverage/index.html +236 -0
  4. package/coverage/{lcov-report/sorter.js → sorter.js} +21 -7
  5. package/coverage/{lcov-report/core → src}/index.html +23 -23
  6. package/coverage/src/index.js.html +241 -0
  7. package/coverage/src/phaser/core/animation.js.html +1450 -0
  8. package/coverage/src/phaser/core/animation_manager.js.html +1117 -0
  9. package/coverage/src/phaser/core/animation_parser.js.html +373 -0
  10. package/coverage/src/phaser/core/array_set.js.html +562 -0
  11. package/coverage/src/phaser/core/cache.js.html +2404 -0
  12. package/coverage/{lcov-report → src/phaser}/core/const.js.html +284 -284
  13. package/coverage/src/phaser/core/device.js.html +373 -0
  14. package/coverage/src/phaser/core/device_util.js.html +850 -0
  15. package/coverage/src/phaser/core/dom.js.html +1042 -0
  16. package/coverage/src/phaser/core/error_code.js.html +109 -0
  17. package/coverage/src/phaser/core/event_manager.js.html +1264 -0
  18. package/coverage/src/phaser/core/factory.js.html +436 -0
  19. package/coverage/src/phaser/core/frame.js.html +415 -0
  20. package/coverage/src/phaser/core/frame_data.js.html +478 -0
  21. package/coverage/src/phaser/core/frame_util.js.html +169 -0
  22. package/coverage/src/phaser/core/game.js.html +1075 -0
  23. package/coverage/src/phaser/core/index.html +731 -0
  24. package/coverage/src/phaser/core/input.js.html +1576 -0
  25. package/coverage/src/phaser/core/input_handler.js.html +2959 -0
  26. package/coverage/src/phaser/core/input_mouse.js.html +988 -0
  27. package/coverage/src/phaser/core/input_mspointer.js.html +754 -0
  28. package/coverage/src/phaser/core/input_pointer.js.html +1645 -0
  29. package/coverage/src/phaser/core/input_touch.js.html +643 -0
  30. package/coverage/src/phaser/core/loader.js.html +3676 -0
  31. package/coverage/src/phaser/core/loader_parser.js.html +397 -0
  32. package/coverage/src/phaser/core/raf.js.html +184 -0
  33. package/coverage/src/phaser/core/scale_manager.js.html +3082 -0
  34. package/coverage/src/phaser/core/scene.js.html +265 -0
  35. package/coverage/src/phaser/core/scene_manager.js.html +1030 -0
  36. package/coverage/src/phaser/core/signal.js.html +859 -0
  37. package/coverage/src/phaser/core/signal_binding.js.html +388 -0
  38. package/coverage/src/phaser/core/sound.js.html +1678 -0
  39. package/coverage/src/phaser/core/sound_manager.js.html +1594 -0
  40. package/coverage/src/phaser/core/sound_sprite.js.html +265 -0
  41. package/coverage/src/phaser/core/stage.js.html +505 -0
  42. package/coverage/src/phaser/core/time.js.html +829 -0
  43. package/coverage/src/phaser/core/timer.js.html +1231 -0
  44. package/coverage/src/phaser/core/timer_event.js.html +157 -0
  45. package/coverage/src/phaser/core/tween.js.html +1486 -0
  46. package/coverage/src/phaser/core/tween_data.js.html +976 -0
  47. package/coverage/src/phaser/core/tween_easing.js.html +1099 -0
  48. package/coverage/src/phaser/core/tween_manager.js.html +826 -0
  49. package/coverage/src/phaser/core/world.js.html +139 -0
  50. package/coverage/src/phaser/display/bitmap_text.js.html +1423 -0
  51. package/coverage/src/phaser/display/button.js.html +916 -0
  52. package/coverage/src/phaser/display/canvas/buffer.js.html +232 -0
  53. package/coverage/src/phaser/display/canvas/graphics.js.html +766 -0
  54. package/coverage/src/phaser/display/canvas/index.html +206 -0
  55. package/coverage/src/phaser/display/canvas/masker.js.html +184 -0
  56. package/coverage/src/phaser/display/canvas/pool.js.html +445 -0
  57. package/coverage/src/phaser/display/canvas/renderer.js.html +589 -0
  58. package/coverage/src/phaser/display/canvas/tinter.js.html +658 -0
  59. package/coverage/src/phaser/display/canvas/util.js.html +544 -0
  60. package/coverage/src/phaser/display/display_object.js.html +2494 -0
  61. package/coverage/src/phaser/display/graphics.js.html +2815 -0
  62. package/coverage/src/phaser/display/graphics_data.js.html +187 -0
  63. package/coverage/src/phaser/display/graphics_data_util.js.html +139 -0
  64. package/coverage/src/phaser/display/group.js.html +1000 -0
  65. package/coverage/src/phaser/display/image.js.html +1222 -0
  66. package/coverage/src/phaser/display/index.html +266 -0
  67. package/coverage/src/phaser/display/sprite_batch.js.html +121 -0
  68. package/coverage/src/phaser/display/sprite_util.js.html +883 -0
  69. package/coverage/src/phaser/display/text.js.html +4597 -0
  70. package/coverage/src/phaser/display/webgl/abstract_filter.js.html +157 -0
  71. package/coverage/src/phaser/display/webgl/base_texture.js.html +322 -0
  72. package/coverage/src/phaser/display/webgl/blend_manager.js.html +208 -0
  73. package/coverage/src/phaser/display/webgl/earcut.js.html +2137 -0
  74. package/coverage/src/phaser/display/webgl/earcut_node.js.html +160 -0
  75. package/coverage/src/phaser/display/webgl/fast_sprite_batch.js.html +877 -0
  76. package/coverage/src/phaser/display/webgl/filter_manager.js.html +271 -0
  77. package/coverage/src/phaser/display/webgl/filter_texture.js.html +298 -0
  78. package/coverage/src/phaser/display/webgl/graphics.js.html +1942 -0
  79. package/coverage/src/phaser/display/webgl/graphics_data.js.html +214 -0
  80. package/coverage/src/phaser/display/webgl/index.html +386 -0
  81. package/coverage/src/phaser/display/webgl/mask_manager.js.html +199 -0
  82. package/coverage/src/phaser/display/webgl/render_texture.js.html +406 -0
  83. package/coverage/src/phaser/display/webgl/renderer.js.html +1003 -0
  84. package/coverage/src/phaser/display/webgl/shader/complex.js.html +316 -0
  85. package/coverage/src/phaser/display/webgl/shader/fast.js.html +406 -0
  86. package/coverage/src/phaser/display/webgl/shader/index.html +176 -0
  87. package/coverage/src/phaser/display/webgl/shader/normal.js.html +826 -0
  88. package/coverage/src/phaser/display/webgl/shader/primitive.js.html +310 -0
  89. package/coverage/src/phaser/display/webgl/shader/strip.js.html +325 -0
  90. package/coverage/src/phaser/display/webgl/shader_manager.js.html +385 -0
  91. package/coverage/src/phaser/display/webgl/sprite_batch.js.html +1135 -0
  92. package/coverage/src/phaser/display/webgl/stencil_manager.js.html +655 -0
  93. package/coverage/src/phaser/display/webgl/texture.js.html +490 -0
  94. package/coverage/src/phaser/display/webgl/texture_util.js.html +169 -0
  95. package/coverage/src/phaser/display/webgl/util.js.html +451 -0
  96. package/coverage/{lcov-report → src/phaser}/geom/circle.js.html +252 -252
  97. package/coverage/{lcov-report → src/phaser}/geom/ellipse.js.html +79 -79
  98. package/coverage/{lcov-report → src/phaser}/geom/index.html +67 -67
  99. package/coverage/{lcov-report → src/phaser}/geom/line.js.html +287 -287
  100. package/coverage/{lcov-report → src/phaser}/geom/matrix.js.html +135 -135
  101. package/coverage/{lcov-report → src/phaser}/geom/point.js.html +251 -251
  102. package/coverage/{lcov-report → src/phaser}/geom/polygon.js.html +147 -147
  103. package/coverage/{lcov-report → src/phaser}/geom/rectangle.js.html +408 -408
  104. package/coverage/{lcov-report → src/phaser}/geom/rounded_rectangle.js.html +45 -45
  105. package/coverage/{lcov-report → src/phaser}/geom/util/circle.js.html +104 -104
  106. package/coverage/{lcov-report → src/phaser}/geom/util/ellipse.js.html +29 -29
  107. package/coverage/{lcov-report → src/phaser}/geom/util/index.html +76 -76
  108. package/coverage/{lcov-report → src/phaser}/geom/util/line.js.html +123 -123
  109. package/coverage/{lcov-report → src/phaser}/geom/util/matrix.js.html +45 -45
  110. package/coverage/{lcov-report → src/phaser}/geom/util/point.js.html +274 -274
  111. package/coverage/{lcov-report → src/phaser}/geom/util/polygon.js.html +21 -21
  112. package/coverage/{lcov-report → src/phaser}/geom/util/rectangle.js.html +218 -218
  113. package/coverage/{lcov-report → src/phaser}/geom/util/rounded_rectangle.js.html +21 -21
  114. package/coverage/{lcov-report → src/phaser}/util/index.html +28 -28
  115. package/coverage/{lcov-report → src/phaser}/util/math.js.html +283 -283
  116. package/eslint.config.js +5 -3
  117. package/package.json +21 -21
  118. package/pnpm-workspace.yaml +2 -0
  119. package/src/phaser/core/animation_manager.js +1 -1
  120. package/src/phaser/display/image.js +1 -0
  121. package/types/phaser/core/animation_manager.d.ts +1 -1
  122. package/types/phaser/core/animation_manager.d.ts.map +1 -1
  123. package/types/phaser/display/image.d.ts +2 -1
  124. package/types/phaser/display/image.d.ts.map +1 -1
  125. package/coverage/clover.xml +0 -1092
  126. package/coverage/coverage-final.json +0 -19
  127. package/coverage/lcov-report/index.html +0 -161
  128. package/coverage/lcov.info +0 -2179
  129. /package/coverage/{lcov-report/base.css → base.css} +0 -0
  130. /package/coverage/{lcov-report/favicon.png → favicon.png} +0 -0
  131. /package/coverage/{lcov-report/prettify.css → prettify.css} +0 -0
  132. /package/coverage/{lcov-report/prettify.js → prettify.js} +0 -0
  133. /package/coverage/{lcov-report/sort-arrow-sprite.png → sort-arrow-sprite.png} +0 -0
@@ -0,0 +1,1135 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/phaser/display/webgl/sprite_batch.js</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../../../prettify.css" />
9
+ <link rel="stylesheet" href="../../../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">src/phaser/display/webgl</a> sprite_batch.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/339</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/1</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/1</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/339</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
417
+ <span class="cline-any cline-no">&nbsp;</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-no">&nbsp;</span>
420
+ <span class="cline-any cline-no">&nbsp;</span>
421
+ <span class="cline-any cline-no">&nbsp;</span>
422
+ <span class="cline-any cline-no">&nbsp;</span>
423
+ <span class="cline-any cline-no">&nbsp;</span>
424
+ <span class="cline-any cline-no">&nbsp;</span>
425
+ <span class="cline-any cline-no">&nbsp;</span>
426
+ <span class="cline-any cline-no">&nbsp;</span>
427
+ <span class="cline-any cline-no">&nbsp;</span>
428
+ <span class="cline-any cline-no">&nbsp;</span>
429
+ <span class="cline-any cline-no">&nbsp;</span>
430
+ <span class="cline-any cline-no">&nbsp;</span>
431
+ <span class="cline-any cline-no">&nbsp;</span>
432
+ <span class="cline-any cline-no">&nbsp;</span>
433
+ <span class="cline-any cline-no">&nbsp;</span>
434
+ <span class="cline-any cline-no">&nbsp;</span>
435
+ <span class="cline-any cline-no">&nbsp;</span>
436
+ <span class="cline-any cline-no">&nbsp;</span>
437
+ <span class="cline-any cline-no">&nbsp;</span>
438
+ <span class="cline-any cline-no">&nbsp;</span>
439
+ <span class="cline-any cline-no">&nbsp;</span>
440
+ <span class="cline-any cline-no">&nbsp;</span>
441
+ <span class="cline-any cline-no">&nbsp;</span>
442
+ <span class="cline-any cline-no">&nbsp;</span>
443
+ <span class="cline-any cline-no">&nbsp;</span>
444
+ <span class="cline-any cline-no">&nbsp;</span>
445
+ <span class="cline-any cline-no">&nbsp;</span>
446
+ <span class="cline-any cline-no">&nbsp;</span>
447
+ <span class="cline-any cline-no">&nbsp;</span>
448
+ <span class="cline-any cline-no">&nbsp;</span>
449
+ <span class="cline-any cline-no">&nbsp;</span>
450
+ <span class="cline-any cline-no">&nbsp;</span>
451
+ <span class="cline-any cline-no">&nbsp;</span>
452
+ <span class="cline-any cline-no">&nbsp;</span>
453
+ <span class="cline-any cline-no">&nbsp;</span>
454
+ <span class="cline-any cline-no">&nbsp;</span>
455
+ <span class="cline-any cline-no">&nbsp;</span>
456
+ <span class="cline-any cline-no">&nbsp;</span>
457
+ <span class="cline-any cline-no">&nbsp;</span>
458
+ <span class="cline-any cline-no">&nbsp;</span>
459
+ <span class="cline-any cline-no">&nbsp;</span>
460
+ <span class="cline-any cline-no">&nbsp;</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-no">&nbsp;</span>
463
+ <span class="cline-any cline-no">&nbsp;</span>
464
+ <span class="cline-any cline-no">&nbsp;</span>
465
+ <span class="cline-any cline-no">&nbsp;</span>
466
+ <span class="cline-any cline-no">&nbsp;</span>
467
+ <span class="cline-any cline-no">&nbsp;</span>
468
+ <span class="cline-any cline-no">&nbsp;</span>
469
+ <span class="cline-any cline-no">&nbsp;</span>
470
+ <span class="cline-any cline-no">&nbsp;</span>
471
+ <span class="cline-any cline-no">&nbsp;</span>
472
+ <span class="cline-any cline-no">&nbsp;</span>
473
+ <span class="cline-any cline-no">&nbsp;</span>
474
+ <span class="cline-any cline-no">&nbsp;</span>
475
+ <span class="cline-any cline-no">&nbsp;</span>
476
+ <span class="cline-any cline-no">&nbsp;</span>
477
+ <span class="cline-any cline-no">&nbsp;</span>
478
+ <span class="cline-any cline-no">&nbsp;</span>
479
+ <span class="cline-any cline-no">&nbsp;</span>
480
+ <span class="cline-any cline-no">&nbsp;</span>
481
+ <span class="cline-any cline-no">&nbsp;</span>
482
+ <span class="cline-any cline-no">&nbsp;</span>
483
+ <span class="cline-any cline-no">&nbsp;</span>
484
+ <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-no">&nbsp;</span>
486
+ <span class="cline-any cline-no">&nbsp;</span>
487
+ <span class="cline-any cline-no">&nbsp;</span>
488
+ <span class="cline-any cline-no">&nbsp;</span>
489
+ <span class="cline-any cline-no">&nbsp;</span>
490
+ <span class="cline-any cline-no">&nbsp;</span>
491
+ <span class="cline-any cline-no">&nbsp;</span>
492
+ <span class="cline-any cline-no">&nbsp;</span>
493
+ <span class="cline-any cline-no">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-no">&nbsp;</span>
496
+ <span class="cline-any cline-no">&nbsp;</span>
497
+ <span class="cline-any cline-no">&nbsp;</span>
498
+ <span class="cline-any cline-no">&nbsp;</span>
499
+ <span class="cline-any cline-no">&nbsp;</span>
500
+ <span class="cline-any cline-no">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-no">&nbsp;</span>
503
+ <span class="cline-any cline-no">&nbsp;</span>
504
+ <span class="cline-any cline-no">&nbsp;</span>
505
+ <span class="cline-any cline-no">&nbsp;</span>
506
+ <span class="cline-any cline-no">&nbsp;</span>
507
+ <span class="cline-any cline-no">&nbsp;</span>
508
+ <span class="cline-any cline-no">&nbsp;</span>
509
+ <span class="cline-any cline-no">&nbsp;</span>
510
+ <span class="cline-any cline-no">&nbsp;</span>
511
+ <span class="cline-any cline-no">&nbsp;</span>
512
+ <span class="cline-any cline-no">&nbsp;</span>
513
+ <span class="cline-any cline-no">&nbsp;</span>
514
+ <span class="cline-any cline-no">&nbsp;</span>
515
+ <span class="cline-any cline-no">&nbsp;</span>
516
+ <span class="cline-any cline-no">&nbsp;</span>
517
+ <span class="cline-any cline-no">&nbsp;</span>
518
+ <span class="cline-any cline-no">&nbsp;</span>
519
+ <span class="cline-any cline-no">&nbsp;</span>
520
+ <span class="cline-any cline-no">&nbsp;</span>
521
+ <span class="cline-any cline-no">&nbsp;</span>
522
+ <span class="cline-any cline-no">&nbsp;</span>
523
+ <span class="cline-any cline-no">&nbsp;</span>
524
+ <span class="cline-any cline-no">&nbsp;</span>
525
+ <span class="cline-any cline-no">&nbsp;</span>
526
+ <span class="cline-any cline-no">&nbsp;</span>
527
+ <span class="cline-any cline-no">&nbsp;</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-no">&nbsp;</span>
530
+ <span class="cline-any cline-no">&nbsp;</span>
531
+ <span class="cline-any cline-no">&nbsp;</span>
532
+ <span class="cline-any cline-no">&nbsp;</span>
533
+ <span class="cline-any cline-no">&nbsp;</span>
534
+ <span class="cline-any cline-no">&nbsp;</span>
535
+ <span class="cline-any cline-no">&nbsp;</span>
536
+ <span class="cline-any cline-no">&nbsp;</span>
537
+ <span class="cline-any cline-no">&nbsp;</span>
538
+ <span class="cline-any cline-no">&nbsp;</span>
539
+ <span class="cline-any cline-no">&nbsp;</span>
540
+ <span class="cline-any cline-no">&nbsp;</span>
541
+ <span class="cline-any cline-no">&nbsp;</span>
542
+ <span class="cline-any cline-no">&nbsp;</span>
543
+ <span class="cline-any cline-no">&nbsp;</span>
544
+ <span class="cline-any cline-no">&nbsp;</span>
545
+ <span class="cline-any cline-no">&nbsp;</span>
546
+ <span class="cline-any cline-no">&nbsp;</span>
547
+ <span class="cline-any cline-no">&nbsp;</span>
548
+ <span class="cline-any cline-no">&nbsp;</span>
549
+ <span class="cline-any cline-no">&nbsp;</span>
550
+ <span class="cline-any cline-no">&nbsp;</span>
551
+ <span class="cline-any cline-no">&nbsp;</span>
552
+ <span class="cline-any cline-no">&nbsp;</span>
553
+ <span class="cline-any cline-no">&nbsp;</span>
554
+ <span class="cline-any cline-no">&nbsp;</span>
555
+ <span class="cline-any cline-no">&nbsp;</span>
556
+ <span class="cline-any cline-no">&nbsp;</span>
557
+ <span class="cline-any cline-no">&nbsp;</span>
558
+ <span class="cline-any cline-no">&nbsp;</span>
559
+ <span class="cline-any cline-no">&nbsp;</span>
560
+ <span class="cline-any cline-no">&nbsp;</span>
561
+ <span class="cline-any cline-no">&nbsp;</span>
562
+ <span class="cline-any cline-no">&nbsp;</span>
563
+ <span class="cline-any cline-no">&nbsp;</span>
564
+ <span class="cline-any cline-no">&nbsp;</span>
565
+ <span class="cline-any cline-no">&nbsp;</span>
566
+ <span class="cline-any cline-no">&nbsp;</span>
567
+ <span class="cline-any cline-no">&nbsp;</span>
568
+ <span class="cline-any cline-no">&nbsp;</span>
569
+ <span class="cline-any cline-no">&nbsp;</span>
570
+ <span class="cline-any cline-no">&nbsp;</span>
571
+ <span class="cline-any cline-no">&nbsp;</span>
572
+ <span class="cline-any cline-no">&nbsp;</span>
573
+ <span class="cline-any cline-no">&nbsp;</span>
574
+ <span class="cline-any cline-no">&nbsp;</span>
575
+ <span class="cline-any cline-no">&nbsp;</span>
576
+ <span class="cline-any cline-no">&nbsp;</span>
577
+ <span class="cline-any cline-no">&nbsp;</span>
578
+ <span class="cline-any cline-no">&nbsp;</span>
579
+ <span class="cline-any cline-no">&nbsp;</span>
580
+ <span class="cline-any cline-no">&nbsp;</span>
581
+ <span class="cline-any cline-no">&nbsp;</span>
582
+ <span class="cline-any cline-no">&nbsp;</span>
583
+ <span class="cline-any cline-no">&nbsp;</span>
584
+ <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-no">&nbsp;</span>
586
+ <span class="cline-any cline-no">&nbsp;</span>
587
+ <span class="cline-any cline-no">&nbsp;</span>
588
+ <span class="cline-any cline-no">&nbsp;</span>
589
+ <span class="cline-any cline-no">&nbsp;</span>
590
+ <span class="cline-any cline-no">&nbsp;</span>
591
+ <span class="cline-any cline-no">&nbsp;</span>
592
+ <span class="cline-any cline-no">&nbsp;</span>
593
+ <span class="cline-any cline-no">&nbsp;</span>
594
+ <span class="cline-any cline-no">&nbsp;</span>
595
+ <span class="cline-any cline-no">&nbsp;</span>
596
+ <span class="cline-any cline-no">&nbsp;</span>
597
+ <span class="cline-any cline-no">&nbsp;</span>
598
+ <span class="cline-any cline-no">&nbsp;</span>
599
+ <span class="cline-any cline-no">&nbsp;</span>
600
+ <span class="cline-any cline-no">&nbsp;</span>
601
+ <span class="cline-any cline-no">&nbsp;</span>
602
+ <span class="cline-any cline-no">&nbsp;</span>
603
+ <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-no">&nbsp;</span>
605
+ <span class="cline-any cline-no">&nbsp;</span>
606
+ <span class="cline-any cline-no">&nbsp;</span>
607
+ <span class="cline-any cline-no">&nbsp;</span>
608
+ <span class="cline-any cline-no">&nbsp;</span>
609
+ <span class="cline-any cline-no">&nbsp;</span>
610
+ <span class="cline-any cline-neutral">&nbsp;</span>
611
+ <span class="cline-any cline-no">&nbsp;</span>
612
+ <span class="cline-any cline-no">&nbsp;</span>
613
+ <span class="cline-any cline-no">&nbsp;</span>
614
+ <span class="cline-any cline-no">&nbsp;</span>
615
+ <span class="cline-any cline-no">&nbsp;</span>
616
+ <span class="cline-any cline-no">&nbsp;</span>
617
+ <span class="cline-any cline-no">&nbsp;</span>
618
+ <span class="cline-any cline-no">&nbsp;</span>
619
+ <span class="cline-any cline-no">&nbsp;</span>
620
+ <span class="cline-any cline-no">&nbsp;</span>
621
+ <span class="cline-any cline-no">&nbsp;</span>
622
+ <span class="cline-any cline-no">&nbsp;</span>
623
+ <span class="cline-any cline-no">&nbsp;</span>
624
+ <span class="cline-any cline-no">&nbsp;</span>
625
+ <span class="cline-any cline-no">&nbsp;</span>
626
+ <span class="cline-any cline-no">&nbsp;</span>
627
+ <span class="cline-any cline-no">&nbsp;</span>
628
+ <span class="cline-any cline-no">&nbsp;</span>
629
+ <span class="cline-any cline-no">&nbsp;</span>
630
+ <span class="cline-any cline-no">&nbsp;</span>
631
+ <span class="cline-any cline-no">&nbsp;</span>
632
+ <span class="cline-any cline-no">&nbsp;</span>
633
+ <span class="cline-any cline-no">&nbsp;</span>
634
+ <span class="cline-any cline-no">&nbsp;</span>
635
+ <span class="cline-any cline-no">&nbsp;</span>
636
+ <span class="cline-any cline-no">&nbsp;</span>
637
+ <span class="cline-any cline-no">&nbsp;</span>
638
+ <span class="cline-any cline-no">&nbsp;</span>
639
+ <span class="cline-any cline-no">&nbsp;</span>
640
+ <span class="cline-any cline-no">&nbsp;</span>
641
+ <span class="cline-any cline-no">&nbsp;</span>
642
+ <span class="cline-any cline-no">&nbsp;</span>
643
+ <span class="cline-any cline-no">&nbsp;</span>
644
+ <span class="cline-any cline-no">&nbsp;</span>
645
+ <span class="cline-any cline-no">&nbsp;</span>
646
+ <span class="cline-any cline-no">&nbsp;</span>
647
+ <span class="cline-any cline-no">&nbsp;</span>
648
+ <span class="cline-any cline-no">&nbsp;</span>
649
+ <span class="cline-any cline-no">&nbsp;</span>
650
+ <span class="cline-any cline-no">&nbsp;</span>
651
+ <span class="cline-any cline-no">&nbsp;</span>
652
+ <span class="cline-any cline-no">&nbsp;</span>
653
+ <span class="cline-any cline-no">&nbsp;</span>
654
+ <span class="cline-any cline-no">&nbsp;</span>
655
+ <span class="cline-any cline-no">&nbsp;</span>
656
+ <span class="cline-any cline-no">&nbsp;</span>
657
+ <span class="cline-any cline-no">&nbsp;</span>
658
+ <span class="cline-any cline-no">&nbsp;</span>
659
+ <span class="cline-any cline-no">&nbsp;</span>
660
+ <span class="cline-any cline-no">&nbsp;</span>
661
+ <span class="cline-any cline-no">&nbsp;</span>
662
+ <span class="cline-any cline-no">&nbsp;</span>
663
+ <span class="cline-any cline-no">&nbsp;</span>
664
+ <span class="cline-any cline-no">&nbsp;</span>
665
+ <span class="cline-any cline-no">&nbsp;</span>
666
+ <span class="cline-any cline-no">&nbsp;</span>
667
+ <span class="cline-any cline-no">&nbsp;</span>
668
+ <span class="cline-any cline-no">&nbsp;</span>
669
+ <span class="cline-any cline-no">&nbsp;</span>
670
+ <span class="cline-any cline-no">&nbsp;</span>
671
+ <span class="cline-any cline-no">&nbsp;</span>
672
+ <span class="cline-any cline-no">&nbsp;</span>
673
+ <span class="cline-any cline-no">&nbsp;</span>
674
+ <span class="cline-any cline-no">&nbsp;</span>
675
+ <span class="cline-any cline-no">&nbsp;</span>
676
+ <span class="cline-any cline-no">&nbsp;</span>
677
+ <span class="cline-any cline-no">&nbsp;</span>
678
+ <span class="cline-any cline-no">&nbsp;</span>
679
+ <span class="cline-any cline-no">&nbsp;</span>
680
+ <span class="cline-any cline-no">&nbsp;</span>
681
+ <span class="cline-any cline-no">&nbsp;</span>
682
+ <span class="cline-any cline-no">&nbsp;</span>
683
+ <span class="cline-any cline-no">&nbsp;</span>
684
+ <span class="cline-any cline-no">&nbsp;</span>
685
+ <span class="cline-any cline-no">&nbsp;</span>
686
+ <span class="cline-any cline-no">&nbsp;</span>
687
+ <span class="cline-any cline-no">&nbsp;</span>
688
+ <span class="cline-any cline-no">&nbsp;</span>
689
+ <span class="cline-any cline-no">&nbsp;</span>
690
+ <span class="cline-any cline-no">&nbsp;</span>
691
+ <span class="cline-any cline-no">&nbsp;</span>
692
+ <span class="cline-any cline-no">&nbsp;</span>
693
+ <span class="cline-any cline-no">&nbsp;</span>
694
+ <span class="cline-any cline-no">&nbsp;</span>
695
+ <span class="cline-any cline-no">&nbsp;</span>
696
+ <span class="cline-any cline-no">&nbsp;</span>
697
+ <span class="cline-any cline-no">&nbsp;</span>
698
+ <span class="cline-any cline-no">&nbsp;</span>
699
+ <span class="cline-any cline-no">&nbsp;</span>
700
+ <span class="cline-any cline-no">&nbsp;</span>
701
+ <span class="cline-any cline-no">&nbsp;</span>
702
+ <span class="cline-any cline-no">&nbsp;</span>
703
+ <span class="cline-any cline-no">&nbsp;</span>
704
+ <span class="cline-any cline-no">&nbsp;</span>
705
+ <span class="cline-any cline-no">&nbsp;</span>
706
+ <span class="cline-any cline-no">&nbsp;</span>
707
+ <span class="cline-any cline-no">&nbsp;</span>
708
+ <span class="cline-any cline-no">&nbsp;</span>
709
+ <span class="cline-any cline-neutral">&nbsp;</span>
710
+ <span class="cline-any cline-no">&nbsp;</span>
711
+ <span class="cline-any cline-no">&nbsp;</span>
712
+ <span class="cline-any cline-no">&nbsp;</span>
713
+ <span class="cline-any cline-no">&nbsp;</span>
714
+ <span class="cline-any cline-no">&nbsp;</span>
715
+ <span class="cline-any cline-no">&nbsp;</span>
716
+ <span class="cline-any cline-no">&nbsp;</span>
717
+ <span class="cline-any cline-no">&nbsp;</span>
718
+ <span class="cline-any cline-no">&nbsp;</span>
719
+ <span class="cline-any cline-no">&nbsp;</span>
720
+ <span class="cline-any cline-no">&nbsp;</span>
721
+ <span class="cline-any cline-no">&nbsp;</span>
722
+ <span class="cline-any cline-no">&nbsp;</span>
723
+ <span class="cline-any cline-no">&nbsp;</span>
724
+ <span class="cline-any cline-no">&nbsp;</span>
725
+ <span class="cline-any cline-no">&nbsp;</span>
726
+ <span class="cline-any cline-no">&nbsp;</span>
727
+ <span class="cline-any cline-no">&nbsp;</span>
728
+ <span class="cline-any cline-no">&nbsp;</span>
729
+ <span class="cline-any cline-no">&nbsp;</span>
730
+ <span class="cline-any cline-no">&nbsp;</span>
731
+ <span class="cline-any cline-no">&nbsp;</span>
732
+ <span class="cline-any cline-no">&nbsp;</span>
733
+ <span class="cline-any cline-no">&nbsp;</span>
734
+ <span class="cline-any cline-no">&nbsp;</span>
735
+ <span class="cline-any cline-no">&nbsp;</span>
736
+ <span class="cline-any cline-neutral">&nbsp;</span>
737
+ <span class="cline-any cline-no">&nbsp;</span>
738
+ <span class="cline-any cline-no">&nbsp;</span>
739
+ <span class="cline-any cline-no">&nbsp;</span>
740
+ <span class="cline-any cline-no">&nbsp;</span>
741
+ <span class="cline-any cline-no">&nbsp;</span>
742
+ <span class="cline-any cline-no">&nbsp;</span>
743
+ <span class="cline-any cline-no">&nbsp;</span>
744
+ <span class="cline-any cline-neutral">&nbsp;</span>
745
+ <span class="cline-any cline-no">&nbsp;</span>
746
+ <span class="cline-any cline-no">&nbsp;</span>
747
+ <span class="cline-any cline-no">&nbsp;</span>
748
+ <span class="cline-any cline-no">&nbsp;</span>
749
+ <span class="cline-any cline-no">&nbsp;</span>
750
+ <span class="cline-any cline-no">&nbsp;</span>
751
+ <span class="cline-any cline-neutral">&nbsp;</span>
752
+ <span class="cline-any cline-no">&nbsp;</span>
753
+ <span class="cline-any cline-no">&nbsp;</span>
754
+ <span class="cline-any cline-no">&nbsp;</span>
755
+ <span class="cline-any cline-no">&nbsp;</span>
756
+ <span class="cline-any cline-no">&nbsp;</span>
757
+ <span class="cline-any cline-no">&nbsp;</span>
758
+ <span class="cline-any cline-no">&nbsp;</span>
759
+ <span class="cline-any cline-no">&nbsp;</span>
760
+ <span class="cline-any cline-no">&nbsp;</span>
761
+ <span class="cline-any cline-no">&nbsp;</span>
762
+ <span class="cline-any cline-no">&nbsp;</span>
763
+ <span class="cline-any cline-no">&nbsp;</span>
764
+ <span class="cline-any cline-no">&nbsp;</span>
765
+ <span class="cline-any cline-no">&nbsp;</span>
766
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import { AbstractFilter } from './abstract_filter.js';<span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span></span>
767
+ <span class="cstat-no" title="statement not covered" >import { NormalShader } from './shader/normal.js';</span>
768
+ &nbsp;
769
+ <span class="cstat-no" title="statement not covered" >export class WebGLSpriteBatch {</span>
770
+ <span class="cstat-no" title="statement not covered" > /**</span>
771
+ <span class="cstat-no" title="statement not covered" > * TBD.</span>
772
+ <span class="cstat-no" title="statement not covered" > */</span>
773
+ <span class="cstat-no" title="statement not covered" > constructor() {</span>
774
+ <span class="cstat-no" title="statement not covered" > this.vertSize = 5;</span>
775
+ <span class="cstat-no" title="statement not covered" > this.size = 2000; // Math.pow(2, 16) / this.vertSize;</span>
776
+ <span class="cstat-no" title="statement not covered" > // the total number of bytes in our batch</span>
777
+ <span class="cstat-no" title="statement not covered" > const numVerts = this.size * 4 * 4 * this.vertSize;</span>
778
+ <span class="cstat-no" title="statement not covered" > // the total number of indices in our batch</span>
779
+ <span class="cstat-no" title="statement not covered" > const numIndices = this.size * 6;</span>
780
+ <span class="cstat-no" title="statement not covered" > this.vertices = new ArrayBuffer(numVerts);</span>
781
+ <span class="cstat-no" title="statement not covered" > this.positions = new Float32Array(this.vertices);</span>
782
+ <span class="cstat-no" title="statement not covered" > this.colors = new Uint32Array(this.vertices);</span>
783
+ <span class="cstat-no" title="statement not covered" > this.indices = new Uint16Array(numIndices);</span>
784
+ <span class="cstat-no" title="statement not covered" > this.lastIndexCount = 0;</span>
785
+ <span class="cstat-no" title="statement not covered" > for (let i = 0, j = 0; i &lt; numIndices; i += 6, j += 4) {</span>
786
+ <span class="cstat-no" title="statement not covered" > this.indices[i + 0] = j + 0;</span>
787
+ <span class="cstat-no" title="statement not covered" > this.indices[i + 1] = j + 1;</span>
788
+ <span class="cstat-no" title="statement not covered" > this.indices[i + 2] = j + 2;</span>
789
+ <span class="cstat-no" title="statement not covered" > this.indices[i + 3] = j + 0;</span>
790
+ <span class="cstat-no" title="statement not covered" > this.indices[i + 4] = j + 2;</span>
791
+ <span class="cstat-no" title="statement not covered" > this.indices[i + 5] = j + 3;</span>
792
+ <span class="cstat-no" title="statement not covered" > }</span>
793
+ <span class="cstat-no" title="statement not covered" > this.drawing = false;</span>
794
+ <span class="cstat-no" title="statement not covered" > this.currentBatchSize = 0;</span>
795
+ <span class="cstat-no" title="statement not covered" > this.currentBaseTexture = null;</span>
796
+ <span class="cstat-no" title="statement not covered" > this.dirty = true;</span>
797
+ <span class="cstat-no" title="statement not covered" > this.textures = [];</span>
798
+ <span class="cstat-no" title="statement not covered" > this.blendModes = [];</span>
799
+ <span class="cstat-no" title="statement not covered" > this.shaders = [];</span>
800
+ <span class="cstat-no" title="statement not covered" > this.sprites = [];</span>
801
+ <span class="cstat-no" title="statement not covered" > this.defaultShader = new AbstractFilter([</span>
802
+ <span class="cstat-no" title="statement not covered" > 'precision lowp float;',</span>
803
+ <span class="cstat-no" title="statement not covered" > 'varying vec2 vTextureCoord;',</span>
804
+ <span class="cstat-no" title="statement not covered" > 'varying vec4 vColor;',</span>
805
+ <span class="cstat-no" title="statement not covered" > 'uniform sampler2D uSampler;',</span>
806
+ <span class="cstat-no" title="statement not covered" > 'void main(void) {',</span>
807
+ <span class="cstat-no" title="statement not covered" > ' gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;',</span>
808
+ <span class="cstat-no" title="statement not covered" > '}',</span>
809
+ <span class="cstat-no" title="statement not covered" > ]);</span>
810
+ <span class="cstat-no" title="statement not covered" > }</span>
811
+ &nbsp;
812
+ <span class="cstat-no" title="statement not covered" > /**</span>
813
+ <span class="cstat-no" title="statement not covered" > * TBD.</span>
814
+ <span class="cstat-no" title="statement not covered" > * @param {WebGLRenderingContext &amp; { id: number }} gl - TBD.</span>
815
+ <span class="cstat-no" title="statement not covered" > */</span>
816
+ <span class="cstat-no" title="statement not covered" > setContext(gl) {</span>
817
+ <span class="cstat-no" title="statement not covered" > this.gl = gl;</span>
818
+ <span class="cstat-no" title="statement not covered" > // create a couple of buffers</span>
819
+ <span class="cstat-no" title="statement not covered" > this.vertexBuffer = gl.createBuffer();</span>
820
+ <span class="cstat-no" title="statement not covered" > this.indexBuffer = gl.createBuffer();</span>
821
+ <span class="cstat-no" title="statement not covered" > // 65535 is max index, so 65535 / 6 = 10922.</span>
822
+ <span class="cstat-no" title="statement not covered" > // upload the index data</span>
823
+ <span class="cstat-no" title="statement not covered" > gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);</span>
824
+ <span class="cstat-no" title="statement not covered" > gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW);</span>
825
+ <span class="cstat-no" title="statement not covered" > gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);</span>
826
+ <span class="cstat-no" title="statement not covered" > gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.DYNAMIC_DRAW);</span>
827
+ <span class="cstat-no" title="statement not covered" > this.currentBlendMode = 99999;</span>
828
+ <span class="cstat-no" title="statement not covered" > const shader = new NormalShader(gl);</span>
829
+ <span class="cstat-no" title="statement not covered" > shader.fragmentSrc = this.defaultShader.fragmentSrc;</span>
830
+ <span class="cstat-no" title="statement not covered" > shader.uniforms = {};</span>
831
+ <span class="cstat-no" title="statement not covered" > shader.init();</span>
832
+ <span class="cstat-no" title="statement not covered" > this.defaultShader.shaders[gl.id] = shader;</span>
833
+ <span class="cstat-no" title="statement not covered" > }</span>
834
+ &nbsp;
835
+ <span class="cstat-no" title="statement not covered" > /**</span>
836
+ <span class="cstat-no" title="statement not covered" > * TBD.</span>
837
+ <span class="cstat-no" title="statement not covered" > * @param {object} renderSession - TBD.</span>
838
+ <span class="cstat-no" title="statement not covered" > */</span>
839
+ <span class="cstat-no" title="statement not covered" > begin(renderSession) {</span>
840
+ <span class="cstat-no" title="statement not covered" > this.renderSession = renderSession;</span>
841
+ <span class="cstat-no" title="statement not covered" > this.shader = this.renderSession.shaderManager.defaultShader;</span>
842
+ <span class="cstat-no" title="statement not covered" > this.start();</span>
843
+ <span class="cstat-no" title="statement not covered" > }</span>
844
+ &nbsp;
845
+ <span class="cstat-no" title="statement not covered" > /**</span>
846
+ <span class="cstat-no" title="statement not covered" > * TBD.</span>
847
+ <span class="cstat-no" title="statement not covered" > */</span>
848
+ <span class="cstat-no" title="statement not covered" > end() {</span>
849
+ <span class="cstat-no" title="statement not covered" > this.flush();</span>
850
+ <span class="cstat-no" title="statement not covered" > }</span>
851
+ &nbsp;
852
+ <span class="cstat-no" title="statement not covered" > /**</span>
853
+ <span class="cstat-no" title="statement not covered" > * TBD.</span>
854
+ <span class="cstat-no" title="statement not covered" > * @param {import('../../display/image.js').Image} sprite - TBD.</span>
855
+ <span class="cstat-no" title="statement not covered" > * @param {import('../../geom/matrix.js').Matrix} matrix - TBD.</span>
856
+ <span class="cstat-no" title="statement not covered" > */</span>
857
+ <span class="cstat-no" title="statement not covered" > render(sprite, matrix) {</span>
858
+ <span class="cstat-no" title="statement not covered" > const texture = sprite.texture;</span>
859
+ <span class="cstat-no" title="statement not covered" > // They provided an alternative rendering matrix, so use it</span>
860
+ <span class="cstat-no" title="statement not covered" > let wt = sprite.worldTransform;</span>
861
+ <span class="cstat-no" title="statement not covered" > if (matrix) {</span>
862
+ <span class="cstat-no" title="statement not covered" > wt = matrix;</span>
863
+ <span class="cstat-no" title="statement not covered" > }</span>
864
+ <span class="cstat-no" title="statement not covered" > // check texture..</span>
865
+ <span class="cstat-no" title="statement not covered" > if (this.currentBatchSize &gt;= this.size) {</span>
866
+ <span class="cstat-no" title="statement not covered" > this.flush();</span>
867
+ <span class="cstat-no" title="statement not covered" > this.currentBaseTexture = texture.baseTexture;</span>
868
+ <span class="cstat-no" title="statement not covered" > }</span>
869
+ <span class="cstat-no" title="statement not covered" > // get the uvs for the texture</span>
870
+ <span class="cstat-no" title="statement not covered" > const uvs = texture._uvs;</span>
871
+ <span class="cstat-no" title="statement not covered" > // if the uvs have not updated then no point rendering just yet!</span>
872
+ <span class="cstat-no" title="statement not covered" > if (!uvs) {</span>
873
+ <span class="cstat-no" title="statement not covered" > return;</span>
874
+ <span class="cstat-no" title="statement not covered" > }</span>
875
+ <span class="cstat-no" title="statement not covered" > const aX = sprite.anchor.x;</span>
876
+ <span class="cstat-no" title="statement not covered" > const aY = sprite.anchor.y;</span>
877
+ <span class="cstat-no" title="statement not covered" > let w0;</span>
878
+ <span class="cstat-no" title="statement not covered" > let w1;</span>
879
+ <span class="cstat-no" title="statement not covered" > let h0;</span>
880
+ <span class="cstat-no" title="statement not covered" > let h1;</span>
881
+ <span class="cstat-no" title="statement not covered" > if (texture.trim) {</span>
882
+ <span class="cstat-no" title="statement not covered" > // if the sprite is trimmed then we need to add the extra space before transforming the sprite coords.</span>
883
+ <span class="cstat-no" title="statement not covered" > const trim = texture.trim;</span>
884
+ <span class="cstat-no" title="statement not covered" > w1 = trim.x - aX * trim.width;</span>
885
+ <span class="cstat-no" title="statement not covered" > w0 = w1 + texture.crop.width;</span>
886
+ <span class="cstat-no" title="statement not covered" > h1 = trim.y - aY * trim.height;</span>
887
+ <span class="cstat-no" title="statement not covered" > h0 = h1 + texture.crop.height;</span>
888
+ <span class="cstat-no" title="statement not covered" > } else {</span>
889
+ <span class="cstat-no" title="statement not covered" > w0 = texture.frame.width * (1 - aX);</span>
890
+ <span class="cstat-no" title="statement not covered" > w1 = texture.frame.width * -aX;</span>
891
+ <span class="cstat-no" title="statement not covered" > h0 = texture.frame.height * (1 - aY);</span>
892
+ <span class="cstat-no" title="statement not covered" > h1 = texture.frame.height * -aY;</span>
893
+ <span class="cstat-no" title="statement not covered" > }</span>
894
+ <span class="cstat-no" title="statement not covered" > const i = this.currentBatchSize * 4 * this.vertSize;</span>
895
+ <span class="cstat-no" title="statement not covered" > const resolution = texture.baseTexture.resolution;</span>
896
+ <span class="cstat-no" title="statement not covered" > const a = wt.a / resolution;</span>
897
+ <span class="cstat-no" title="statement not covered" > const b = wt.b / resolution;</span>
898
+ <span class="cstat-no" title="statement not covered" > const c = wt.c / resolution;</span>
899
+ <span class="cstat-no" title="statement not covered" > const d = wt.d / resolution;</span>
900
+ <span class="cstat-no" title="statement not covered" > const tx = wt.tx;</span>
901
+ <span class="cstat-no" title="statement not covered" > const ty = wt.ty;</span>
902
+ <span class="cstat-no" title="statement not covered" > const colors = this.colors;</span>
903
+ <span class="cstat-no" title="statement not covered" > const positions = this.positions;</span>
904
+ <span class="cstat-no" title="statement not covered" > if (this.renderSession.roundPixels) {</span>
905
+ <span class="cstat-no" title="statement not covered" > // xy</span>
906
+ <span class="cstat-no" title="statement not covered" > positions[i] = (a * w1 + c * h1 + tx) | 0;</span>
907
+ <span class="cstat-no" title="statement not covered" > positions[i + 1] = (d * h1 + b * w1 + ty) | 0;</span>
908
+ <span class="cstat-no" title="statement not covered" > // xy</span>
909
+ <span class="cstat-no" title="statement not covered" > positions[i + 5] = (a * w0 + c * h1 + tx) | 0;</span>
910
+ <span class="cstat-no" title="statement not covered" > positions[i + 6] = (d * h1 + b * w0 + ty) | 0;</span>
911
+ <span class="cstat-no" title="statement not covered" > // xy</span>
912
+ <span class="cstat-no" title="statement not covered" > positions[i + 10] = (a * w0 + c * h0 + tx) | 0;</span>
913
+ <span class="cstat-no" title="statement not covered" > positions[i + 11] = (d * h0 + b * w0 + ty) | 0;</span>
914
+ <span class="cstat-no" title="statement not covered" > // xy</span>
915
+ <span class="cstat-no" title="statement not covered" > positions[i + 15] = (a * w1 + c * h0 + tx) | 0;</span>
916
+ <span class="cstat-no" title="statement not covered" > positions[i + 16] = (d * h0 + b * w1 + ty) | 0;</span>
917
+ <span class="cstat-no" title="statement not covered" > } else {</span>
918
+ <span class="cstat-no" title="statement not covered" > // xy</span>
919
+ <span class="cstat-no" title="statement not covered" > positions[i] = a * w1 + c * h1 + tx;</span>
920
+ <span class="cstat-no" title="statement not covered" > positions[i + 1] = d * h1 + b * w1 + ty;</span>
921
+ <span class="cstat-no" title="statement not covered" > // xy</span>
922
+ <span class="cstat-no" title="statement not covered" > positions[i + 5] = a * w0 + c * h1 + tx;</span>
923
+ <span class="cstat-no" title="statement not covered" > positions[i + 6] = d * h1 + b * w0 + ty;</span>
924
+ <span class="cstat-no" title="statement not covered" > // xy</span>
925
+ <span class="cstat-no" title="statement not covered" > positions[i + 10] = a * w0 + c * h0 + tx;</span>
926
+ <span class="cstat-no" title="statement not covered" > positions[i + 11] = d * h0 + b * w0 + ty;</span>
927
+ <span class="cstat-no" title="statement not covered" > // xy</span>
928
+ <span class="cstat-no" title="statement not covered" > positions[i + 15] = a * w1 + c * h0 + tx;</span>
929
+ <span class="cstat-no" title="statement not covered" > positions[i + 16] = d * h0 + b * w1 + ty;</span>
930
+ <span class="cstat-no" title="statement not covered" > }</span>
931
+ <span class="cstat-no" title="statement not covered" > // uv</span>
932
+ <span class="cstat-no" title="statement not covered" > positions[i + 2] = uvs.x0;</span>
933
+ <span class="cstat-no" title="statement not covered" > positions[i + 3] = uvs.y0;</span>
934
+ <span class="cstat-no" title="statement not covered" > // uv</span>
935
+ <span class="cstat-no" title="statement not covered" > positions[i + 7] = uvs.x1;</span>
936
+ <span class="cstat-no" title="statement not covered" > positions[i + 8] = uvs.y1;</span>
937
+ <span class="cstat-no" title="statement not covered" > // uv</span>
938
+ <span class="cstat-no" title="statement not covered" > positions[i + 12] = uvs.x2;</span>
939
+ <span class="cstat-no" title="statement not covered" > positions[i + 13] = uvs.y2;</span>
940
+ <span class="cstat-no" title="statement not covered" > // uv</span>
941
+ <span class="cstat-no" title="statement not covered" > positions[i + 17] = uvs.x3;</span>
942
+ <span class="cstat-no" title="statement not covered" > positions[i + 18] = uvs.y3;</span>
943
+ <span class="cstat-no" title="statement not covered" > // color and alpha</span>
944
+ <span class="cstat-no" title="statement not covered" > const tint = sprite.tint;</span>
945
+ <span class="cstat-no" title="statement not covered" > colors[i + 4] = (tint &gt;&gt; 16) + (tint &amp; 0xff00) + ((tint &amp; 0xff) &lt;&lt; 16) + ((sprite.worldAlpha * 255) &lt;&lt; 24);</span>
946
+ <span class="cstat-no" title="statement not covered" > colors[i + 9] = colors[i + 4];</span>
947
+ <span class="cstat-no" title="statement not covered" > colors[i + 14] = colors[i + 4];</span>
948
+ <span class="cstat-no" title="statement not covered" > colors[i + 19] = colors[i + 4];</span>
949
+ <span class="cstat-no" title="statement not covered" > // increment the batchsize</span>
950
+ <span class="cstat-no" title="statement not covered" > this.sprites[this.currentBatchSize] = sprite;</span>
951
+ <span class="cstat-no" title="statement not covered" > this.currentBatchSize += 1;</span>
952
+ <span class="cstat-no" title="statement not covered" > }</span>
953
+ &nbsp;
954
+ <span class="cstat-no" title="statement not covered" > /**</span>
955
+ <span class="cstat-no" title="statement not covered" > * TBD.</span>
956
+ <span class="cstat-no" title="statement not covered" > */</span>
957
+ <span class="cstat-no" title="statement not covered" > renderTilingSprite() {</span>
958
+ <span class="cstat-no" title="statement not covered" > // TODO</span>
959
+ <span class="cstat-no" title="statement not covered" > }</span>
960
+ &nbsp;
961
+ <span class="cstat-no" title="statement not covered" > /**</span>
962
+ <span class="cstat-no" title="statement not covered" > * TBD.</span>
963
+ <span class="cstat-no" title="statement not covered" > */</span>
964
+ <span class="cstat-no" title="statement not covered" > flush() {</span>
965
+ <span class="cstat-no" title="statement not covered" > // If the batch is length 0 then return as there is nothing to draw</span>
966
+ <span class="cstat-no" title="statement not covered" > if (this.currentBatchSize === 0) {</span>
967
+ <span class="cstat-no" title="statement not covered" > return;</span>
968
+ <span class="cstat-no" title="statement not covered" > }</span>
969
+ <span class="cstat-no" title="statement not covered" > const gl = this.gl;</span>
970
+ <span class="cstat-no" title="statement not covered" > let shader;</span>
971
+ <span class="cstat-no" title="statement not covered" > if (this.dirty) {</span>
972
+ <span class="cstat-no" title="statement not covered" > this.dirty = false;</span>
973
+ <span class="cstat-no" title="statement not covered" > // bind the main texture</span>
974
+ <span class="cstat-no" title="statement not covered" > gl.activeTexture(gl.TEXTURE0);</span>
975
+ <span class="cstat-no" title="statement not covered" > // bind the buffers</span>
976
+ <span class="cstat-no" title="statement not covered" > gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);</span>
977
+ <span class="cstat-no" title="statement not covered" > gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);</span>
978
+ <span class="cstat-no" title="statement not covered" > shader = this.defaultShader.shaders[gl.id];</span>
979
+ <span class="cstat-no" title="statement not covered" > // this is the same for each shader?</span>
980
+ <span class="cstat-no" title="statement not covered" > const stride = this.vertSize * 4;</span>
981
+ <span class="cstat-no" title="statement not covered" > gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, stride, 0);</span>
982
+ <span class="cstat-no" title="statement not covered" > gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, stride, 2 * 4);</span>
983
+ <span class="cstat-no" title="statement not covered" > // color attributes will be interpreted as unsigned bytes and normalized</span>
984
+ <span class="cstat-no" title="statement not covered" > gl.vertexAttribPointer(shader.colorAttribute, 4, gl.UNSIGNED_BYTE, true, stride, 4 * 4);</span>
985
+ <span class="cstat-no" title="statement not covered" > }</span>
986
+ <span class="cstat-no" title="statement not covered" > // upload the verts to the buffer</span>
987
+ <span class="cstat-no" title="statement not covered" > if (this.currentBatchSize &gt; this.size * 0.5) {</span>
988
+ <span class="cstat-no" title="statement not covered" > gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices);</span>
989
+ <span class="cstat-no" title="statement not covered" > } else {</span>
990
+ <span class="cstat-no" title="statement not covered" > const view = this.positions.subarray(0, this.currentBatchSize * 4 * this.vertSize);</span>
991
+ <span class="cstat-no" title="statement not covered" > gl.bufferSubData(gl.ARRAY_BUFFER, 0, view);</span>
992
+ <span class="cstat-no" title="statement not covered" > }</span>
993
+ <span class="cstat-no" title="statement not covered" > let nextTexture;</span>
994
+ <span class="cstat-no" title="statement not covered" > let nextBlendMode;</span>
995
+ <span class="cstat-no" title="statement not covered" > let nextShader;</span>
996
+ <span class="cstat-no" title="statement not covered" > let batchSize = 0;</span>
997
+ <span class="cstat-no" title="statement not covered" > let start = 0;</span>
998
+ <span class="cstat-no" title="statement not covered" > let currentBaseTexture = null;</span>
999
+ <span class="cstat-no" title="statement not covered" > let currentBlendMode = this.renderSession.blendModeManager.currentBlendMode;</span>
1000
+ <span class="cstat-no" title="statement not covered" > let currentShader = null;</span>
1001
+ <span class="cstat-no" title="statement not covered" > let blendSwap = false;</span>
1002
+ <span class="cstat-no" title="statement not covered" > let shaderSwap = false;</span>
1003
+ <span class="cstat-no" title="statement not covered" > let sprite;</span>
1004
+ <span class="cstat-no" title="statement not covered" > for (let i = 0, j = this.currentBatchSize; i &lt; j; i += 1) {</span>
1005
+ <span class="cstat-no" title="statement not covered" > sprite = this.sprites[i];</span>
1006
+ <span class="cstat-no" title="statement not covered" > if (sprite.tilingTexture) {</span>
1007
+ <span class="cstat-no" title="statement not covered" > nextTexture = sprite.tilingTexture.baseTexture;</span>
1008
+ <span class="cstat-no" title="statement not covered" > } else {</span>
1009
+ <span class="cstat-no" title="statement not covered" > nextTexture = sprite.texture.baseTexture;</span>
1010
+ <span class="cstat-no" title="statement not covered" > }</span>
1011
+ <span class="cstat-no" title="statement not covered" > nextBlendMode = sprite.blendMode;</span>
1012
+ <span class="cstat-no" title="statement not covered" > nextShader = sprite.shader || this.defaultShader;</span>
1013
+ <span class="cstat-no" title="statement not covered" > blendSwap = currentBlendMode !== nextBlendMode;</span>
1014
+ <span class="cstat-no" title="statement not covered" > shaderSwap = !currentShader || !nextShader || currentShader._UID !== nextShader._UID;</span>
1015
+ <span class="cstat-no" title="statement not covered" > let skip = nextTexture.skipRender;</span>
1016
+ <span class="cstat-no" title="statement not covered" > if (skip &amp;&amp; sprite.children.length &gt; 0) {</span>
1017
+ <span class="cstat-no" title="statement not covered" > skip = false;</span>
1018
+ <span class="cstat-no" title="statement not covered" > }</span>
1019
+ <span class="cstat-no" title="statement not covered" > if ((currentBaseTexture !== nextTexture &amp;&amp; !skip) || blendSwap || shaderSwap) {</span>
1020
+ <span class="cstat-no" title="statement not covered" > this.renderBatch(currentBaseTexture, batchSize, start);</span>
1021
+ <span class="cstat-no" title="statement not covered" > start = i;</span>
1022
+ <span class="cstat-no" title="statement not covered" > batchSize = 0;</span>
1023
+ <span class="cstat-no" title="statement not covered" > currentBaseTexture = nextTexture;</span>
1024
+ <span class="cstat-no" title="statement not covered" > if (blendSwap) {</span>
1025
+ <span class="cstat-no" title="statement not covered" > currentBlendMode = nextBlendMode;</span>
1026
+ <span class="cstat-no" title="statement not covered" > this.renderSession.blendModeManager.setBlendMode(currentBlendMode);</span>
1027
+ <span class="cstat-no" title="statement not covered" > }</span>
1028
+ <span class="cstat-no" title="statement not covered" > if (shaderSwap) {</span>
1029
+ <span class="cstat-no" title="statement not covered" > currentShader = nextShader;</span>
1030
+ <span class="cstat-no" title="statement not covered" > shader = currentShader.shaders[gl.id];</span>
1031
+ <span class="cstat-no" title="statement not covered" > if (!shader) {</span>
1032
+ <span class="cstat-no" title="statement not covered" > shader = new NormalShader(gl);</span>
1033
+ <span class="cstat-no" title="statement not covered" > shader.fragmentSrc = currentShader.fragmentSrc;</span>
1034
+ <span class="cstat-no" title="statement not covered" > shader.uniforms = currentShader.uniforms;</span>
1035
+ <span class="cstat-no" title="statement not covered" > shader.init();</span>
1036
+ <span class="cstat-no" title="statement not covered" > currentShader.shaders[gl.id] = shader;</span>
1037
+ <span class="cstat-no" title="statement not covered" > }</span>
1038
+ <span class="cstat-no" title="statement not covered" > // set shader function???</span>
1039
+ <span class="cstat-no" title="statement not covered" > this.renderSession.shaderManager.setShader(shader);</span>
1040
+ <span class="cstat-no" title="statement not covered" > if (shader.dirty) {</span>
1041
+ <span class="cstat-no" title="statement not covered" > shader.syncUniforms();</span>
1042
+ <span class="cstat-no" title="statement not covered" > }</span>
1043
+ <span class="cstat-no" title="statement not covered" > // both these only need to be set if they are changing..</span>
1044
+ <span class="cstat-no" title="statement not covered" > // set the projection</span>
1045
+ <span class="cstat-no" title="statement not covered" > const projection = this.renderSession.projection;</span>
1046
+ <span class="cstat-no" title="statement not covered" > gl.uniform2f(shader.projectionVector, projection.x, projection.y);</span>
1047
+ <span class="cstat-no" title="statement not covered" > // TODO - this is temporary!</span>
1048
+ <span class="cstat-no" title="statement not covered" > const offsetVector = this.renderSession.offset;</span>
1049
+ <span class="cstat-no" title="statement not covered" > gl.uniform2f(shader.offsetVector, offsetVector.x, offsetVector.y);</span>
1050
+ <span class="cstat-no" title="statement not covered" > // set the pointers</span>
1051
+ <span class="cstat-no" title="statement not covered" > }</span>
1052
+ <span class="cstat-no" title="statement not covered" > }</span>
1053
+ <span class="cstat-no" title="statement not covered" > batchSize += 1;</span>
1054
+ <span class="cstat-no" title="statement not covered" > }</span>
1055
+ <span class="cstat-no" title="statement not covered" > this.renderBatch(currentBaseTexture, batchSize, start);</span>
1056
+ <span class="cstat-no" title="statement not covered" > // then reset the batch!</span>
1057
+ <span class="cstat-no" title="statement not covered" > this.currentBatchSize = 0;</span>
1058
+ <span class="cstat-no" title="statement not covered" > }</span>
1059
+ &nbsp;
1060
+ <span class="cstat-no" title="statement not covered" > /**</span>
1061
+ <span class="cstat-no" title="statement not covered" > * TBD.</span>
1062
+ <span class="cstat-no" title="statement not covered" > * @param {import('./base_texture.js').BaseTexture} texture - TBD.</span>
1063
+ <span class="cstat-no" title="statement not covered" > * @param {number} size - TBD.</span>
1064
+ <span class="cstat-no" title="statement not covered" > * @param {number} startIndex - TBD.</span>
1065
+ <span class="cstat-no" title="statement not covered" > */</span>
1066
+ <span class="cstat-no" title="statement not covered" > renderBatch(texture, size, startIndex) {</span>
1067
+ <span class="cstat-no" title="statement not covered" > if (size === 0) {</span>
1068
+ <span class="cstat-no" title="statement not covered" > return;</span>
1069
+ <span class="cstat-no" title="statement not covered" > }</span>
1070
+ <span class="cstat-no" title="statement not covered" > const gl = this.gl;</span>
1071
+ <span class="cstat-no" title="statement not covered" > // check if a texture is dirty..</span>
1072
+ <span class="cstat-no" title="statement not covered" > if (texture._dirty[gl.id]) {</span>
1073
+ <span class="cstat-no" title="statement not covered" > if (!this.renderSession.renderer.updateTexture(texture)) {</span>
1074
+ <span class="cstat-no" title="statement not covered" > // If updateTexture returns false then we cannot render it, so bail out now</span>
1075
+ <span class="cstat-no" title="statement not covered" > return;</span>
1076
+ <span class="cstat-no" title="statement not covered" > }</span>
1077
+ <span class="cstat-no" title="statement not covered" > } else {</span>
1078
+ <span class="cstat-no" title="statement not covered" > // bind the current texture</span>
1079
+ <span class="cstat-no" title="statement not covered" > gl.bindTexture(gl.TEXTURE_2D, texture._glTextures[gl.id]);</span>
1080
+ <span class="cstat-no" title="statement not covered" > }</span>
1081
+ <span class="cstat-no" title="statement not covered" > // now draw those suckas!</span>
1082
+ <span class="cstat-no" title="statement not covered" > gl.drawElements(gl.TRIANGLES, size * 6, gl.UNSIGNED_SHORT, startIndex * 6 * 2);</span>
1083
+ <span class="cstat-no" title="statement not covered" > // increment the draw count</span>
1084
+ <span class="cstat-no" title="statement not covered" > this.renderSession.drawCount += 1;</span>
1085
+ <span class="cstat-no" title="statement not covered" > }</span>
1086
+ &nbsp;
1087
+ <span class="cstat-no" title="statement not covered" > /**</span>
1088
+ <span class="cstat-no" title="statement not covered" > * TBD.</span>
1089
+ <span class="cstat-no" title="statement not covered" > */</span>
1090
+ <span class="cstat-no" title="statement not covered" > stop() {</span>
1091
+ <span class="cstat-no" title="statement not covered" > this.flush();</span>
1092
+ <span class="cstat-no" title="statement not covered" > this.dirty = true;</span>
1093
+ <span class="cstat-no" title="statement not covered" > }</span>
1094
+ &nbsp;
1095
+ <span class="cstat-no" title="statement not covered" > /**</span>
1096
+ <span class="cstat-no" title="statement not covered" > * TBD.</span>
1097
+ <span class="cstat-no" title="statement not covered" > */</span>
1098
+ <span class="cstat-no" title="statement not covered" > start() {</span>
1099
+ <span class="cstat-no" title="statement not covered" > this.dirty = true;</span>
1100
+ <span class="cstat-no" title="statement not covered" > }</span>
1101
+ &nbsp;
1102
+ <span class="cstat-no" title="statement not covered" > /**</span>
1103
+ <span class="cstat-no" title="statement not covered" > * TBD.</span>
1104
+ <span class="cstat-no" title="statement not covered" > */</span>
1105
+ <span class="cstat-no" title="statement not covered" > destroy() {</span>
1106
+ <span class="cstat-no" title="statement not covered" > this.vertices = null;</span>
1107
+ <span class="cstat-no" title="statement not covered" > this.positions = null;</span>
1108
+ <span class="cstat-no" title="statement not covered" > this.colors = null;</span>
1109
+ <span class="cstat-no" title="statement not covered" > this.indices = null;</span>
1110
+ <span class="cstat-no" title="statement not covered" > this.gl.deleteBuffer(this.vertexBuffer);</span>
1111
+ <span class="cstat-no" title="statement not covered" > this.gl.deleteBuffer(this.indexBuffer);</span>
1112
+ <span class="cstat-no" title="statement not covered" > this.currentBaseTexture = null;</span>
1113
+ <span class="cstat-no" title="statement not covered" > this.gl = null;</span>
1114
+ <span class="cstat-no" title="statement not covered" > }</span>
1115
+ <span class="cstat-no" title="statement not covered" >}</span>
1116
+ &nbsp;</pre></td></tr></table></pre>
1117
+
1118
+ <div class='push'></div><!-- for sticky footer -->
1119
+ </div><!-- /wrapper -->
1120
+ <div class='footer quiet pad2 space-top1 center small'>
1121
+ Code coverage generated by
1122
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1123
+ at 2025-08-19T06:39:20.400Z
1124
+ </div>
1125
+ <script src="../../../../prettify.js"></script>
1126
+ <script>
1127
+ window.onload = function () {
1128
+ prettyPrint();
1129
+ };
1130
+ </script>
1131
+ <script src="../../../../sorter.js"></script>
1132
+ <script src="../../../../block-navigation.js"></script>
1133
+ </body>
1134
+ </html>
1135
+