@openglobus/og 0.12.1 → 0.13.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 (230) hide show
  1. package/README.md +0 -2
  2. package/dist/@openglobus/og.css +1 -0
  3. package/dist/@openglobus/og.esm.js +21 -0
  4. package/dist/@openglobus/og.esm.js.map +1 -0
  5. package/dist/@openglobus/og.umd.js +21 -0
  6. package/dist/@openglobus/og.umd.js.map +1 -0
  7. package/package.json +8 -8
  8. package/src/og/Extent.js +3 -3
  9. package/src/og/Globe.js +277 -275
  10. package/src/og/ImageCanvas.js +3 -3
  11. package/src/og/LonLat.js +9 -9
  12. package/src/og/QueueArray.js +2 -2
  13. package/src/og/Rectangle.js +5 -5
  14. package/src/og/bv/Box.js +1 -1
  15. package/src/og/bv/Sphere.js +2 -2
  16. package/src/og/camera/Camera.js +1 -1
  17. package/src/og/camera/PlanetCamera.js +649 -646
  18. package/src/og/control/LayerSwitcher.js +1 -1
  19. package/src/og/control/MouseNavigation.js +22 -13
  20. package/src/og/control/MouseWheelZoomControl.js +2 -2
  21. package/src/og/control/ScaleControl.js +1 -1
  22. package/src/og/control/TouchNavigation.js +319 -319
  23. package/src/og/control/ZoomControl.js +132 -132
  24. package/src/og/control/visibleExtent/Segment.js +12 -12
  25. package/src/og/ellipsoid/Ellipsoid.js +577 -567
  26. package/src/og/entity/BillboardHandler.js +878 -1051
  27. package/src/og/entity/Entity.js +1 -1
  28. package/src/og/entity/EntityCollection.js +847 -857
  29. package/src/og/entity/GeoObjectHandler.js +37 -18
  30. package/src/og/entity/LabelHandler.js +888 -1040
  31. package/src/og/entity/LabelWorker.js +0 -6
  32. package/src/og/entity/PointCloud.js +495 -495
  33. package/src/og/entity/Polyline.js +2218 -2222
  34. package/src/og/entity/RayHandler.js +1 -1
  35. package/src/og/layer/CanvasTiles.js +6 -3
  36. package/src/og/layer/GeoImage.js +1 -1
  37. package/src/og/layer/KML.js +24 -17
  38. package/src/og/layer/Layer.js +806 -751
  39. package/src/og/layer/Vector.js +997 -1010
  40. package/src/og/layer/XYZ.js +359 -357
  41. package/src/og/math/Line2.js +4 -4
  42. package/src/og/math/Quat.js +2 -2
  43. package/src/og/math/Ray.js +2 -2
  44. package/src/og/math/Vec2.js +524 -524
  45. package/src/og/math/Vec3.js +900 -900
  46. package/src/og/math/Vec4.js +261 -261
  47. package/src/og/math.js +397 -398
  48. package/src/og/quadTree/EntityCollectionNode.js +389 -387
  49. package/src/og/renderer/Renderer.js +14 -20
  50. package/src/og/renderer/RendererEvents.js +1034 -1045
  51. package/src/og/scene/Planet.js +26 -23
  52. package/src/og/scene/RenderNode.js +347 -354
  53. package/src/og/segment/Segment.js +3 -1
  54. package/src/og/segment/SegmentLonLat.js +1 -4
  55. package/src/og/shaders/billboard.js +220 -204
  56. package/src/og/shaders/drawnode.js +603 -603
  57. package/src/og/shaders/geoObject.js +15 -6
  58. package/src/og/shaders/label.js +596 -456
  59. package/src/og/shaders/polyline.js +365 -361
  60. package/src/og/terrain/MapboxTerrain.js +1 -1
  61. package/src/og/utils/FontAtlas.js +209 -200
  62. package/src/og/utils/GeoImageCreator.js +4 -5
  63. package/src/og/utils/TextureAtlas.js +4 -4
  64. package/src/og/utils/VectorTileCreator.js +414 -414
  65. package/src/og/utils/shared.js +1 -1
  66. package/src/og/webgl/Handler.js +28 -60
  67. package/src/og/webgl/Multisample.js +260 -260
  68. package/src/og/webgl/Program.js +411 -396
  69. package/types/Clock.d.ts +94 -0
  70. package/types/Deferred.d.ts +6 -0
  71. package/types/Events.d.ts +77 -0
  72. package/types/Extent.d.ts +166 -0
  73. package/types/Globe.d.ts +85 -0
  74. package/types/ImageCanvas.d.ts +123 -0
  75. package/types/Lock.d.ts +12 -0
  76. package/types/LonLat.d.ts +108 -0
  77. package/types/Popup.d.ts +42 -0
  78. package/types/QueueArray.d.ts +19 -0
  79. package/types/Rectangle.d.ts +80 -0
  80. package/types/Stack.d.ts +19 -0
  81. package/types/ajax.d.ts +24 -0
  82. package/types/arial.d.ts +48 -0
  83. package/types/astro/astro.d.ts +38 -0
  84. package/types/astro/earth.d.ts +7 -0
  85. package/types/astro/jd.d.ts +254 -0
  86. package/types/bv/Box.d.ts +30 -0
  87. package/types/bv/Sphere.d.ts +38 -0
  88. package/types/bv/index.d.ts +3 -0
  89. package/types/camera/Camera.d.ts +312 -0
  90. package/types/camera/Frustum.d.ts +133 -0
  91. package/types/camera/PlanetCamera.d.ts +219 -0
  92. package/types/camera/index.d.ts +3 -0
  93. package/types/cons.d.ts +40 -0
  94. package/types/control/CompassButton.d.ts +17 -0
  95. package/types/control/Control.d.ts +104 -0
  96. package/types/control/DebugInfo.d.ts +15 -0
  97. package/types/control/EarthCoordinates.d.ts +47 -0
  98. package/types/control/EarthNavigation.d.ts +43 -0
  99. package/types/control/GeoImageDragControl.d.ts +6 -0
  100. package/types/control/KeyboardNavigation.d.ts +21 -0
  101. package/types/control/LayerSwitcher.d.ts +21 -0
  102. package/types/control/Lighting.d.ts +16 -0
  103. package/types/control/MouseNavigation.d.ts +48 -0
  104. package/types/control/MouseWheelZoomControl.d.ts +45 -0
  105. package/types/control/ScaleControl.d.ts +22 -0
  106. package/types/control/ShowFps.d.ts +11 -0
  107. package/types/control/SimpleNavigation.d.ts +25 -0
  108. package/types/control/Sun.d.ts +50 -0
  109. package/types/control/ToggleWireframe.d.ts +12 -0
  110. package/types/control/TouchNavigation.d.ts +48 -0
  111. package/types/control/ZoomControl.d.ts +27 -0
  112. package/types/control/index.d.ts +18 -0
  113. package/types/ellipsoid/Ellipsoid.d.ts +153 -0
  114. package/types/ellipsoid/index.d.ts +3 -0
  115. package/types/ellipsoid/wgs84.d.ts +6 -0
  116. package/types/entity/BaseBillboard.d.ts +215 -0
  117. package/types/entity/Billboard.d.ts +94 -0
  118. package/types/entity/BillboardHandler.d.ts +75 -0
  119. package/types/entity/Entity.d.ts +348 -0
  120. package/types/entity/EntityCollection.d.ts +309 -0
  121. package/types/entity/GeoObject.d.ts +111 -0
  122. package/types/entity/GeoObjectHandler.d.ts +81 -0
  123. package/types/entity/Geometry.d.ts +74 -0
  124. package/types/entity/GeometryHandler.d.ts +76 -0
  125. package/types/entity/Label.d.ts +189 -0
  126. package/types/entity/LabelHandler.d.ts +29 -0
  127. package/types/entity/LabelWorker.d.ts +11 -0
  128. package/types/entity/PointCloud.d.ts +174 -0
  129. package/types/entity/PointCloudHandler.d.ts +38 -0
  130. package/types/entity/Polyline.d.ts +306 -0
  131. package/types/entity/PolylineHandler.d.ts +18 -0
  132. package/types/entity/Ray.d.ts +124 -0
  133. package/types/entity/RayHandler.d.ts +67 -0
  134. package/types/entity/ShapeHandler.d.ts +22 -0
  135. package/types/entity/Strip.d.ts +119 -0
  136. package/types/entity/StripHandler.d.ts +38 -0
  137. package/types/entity/index.d.ts +8 -0
  138. package/types/index.core.d.ts +65 -0
  139. package/types/index.d.ts +45 -0
  140. package/types/index.webgl.d.ts +7 -0
  141. package/types/input/KeyboardHandler.d.ts +10 -0
  142. package/types/input/MouseHandler.d.ts +5 -0
  143. package/types/input/TouchHandler.d.ts +5 -0
  144. package/types/input/input.d.ts +34 -0
  145. package/types/layer/BaseGeoImage.d.ts +94 -0
  146. package/types/layer/CanvasTiles.d.ts +67 -0
  147. package/types/layer/GeoImage.d.ts +52 -0
  148. package/types/layer/GeoTexture2d.d.ts +8 -0
  149. package/types/layer/GeoVideo.d.ts +55 -0
  150. package/types/layer/KML.d.ts +68 -0
  151. package/types/layer/Layer.d.ts +315 -0
  152. package/types/layer/Material.d.ts +45 -0
  153. package/types/layer/Vector.d.ts +201 -0
  154. package/types/layer/WMS.d.ts +61 -0
  155. package/types/layer/XYZ.d.ts +119 -0
  156. package/types/layer/index.d.ts +10 -0
  157. package/types/light/LightSource.d.ts +178 -0
  158. package/types/math/Line2.d.ts +11 -0
  159. package/types/math/Line3.d.ts +10 -0
  160. package/types/math/Mat3.d.ts +65 -0
  161. package/types/math/Mat4.d.ts +176 -0
  162. package/types/math/Plane.d.ts +18 -0
  163. package/types/math/Quat.d.ts +379 -0
  164. package/types/math/Ray.d.ts +82 -0
  165. package/types/math/Vec2.d.ts +309 -0
  166. package/types/math/Vec3.d.ts +467 -0
  167. package/types/math/Vec4.d.ts +162 -0
  168. package/types/math/coder.d.ts +43 -0
  169. package/types/math/index.d.ts +11 -0
  170. package/types/math.d.ts +261 -0
  171. package/types/mercator.d.ts +92 -0
  172. package/types/proj/EPSG3857.d.ts +6 -0
  173. package/types/proj/EPSG4326.d.ts +6 -0
  174. package/types/proj/Proj.d.ts +42 -0
  175. package/types/quadTree/EntityCollectionNode.d.ts +34 -0
  176. package/types/quadTree/Node.d.ts +60 -0
  177. package/types/quadTree/quadTree.d.ts +40 -0
  178. package/types/renderer/Renderer.d.ts +290 -0
  179. package/types/renderer/RendererEvents.d.ts +237 -0
  180. package/types/res/images.d.ts +3 -0
  181. package/types/scene/Axes.d.ts +11 -0
  182. package/types/scene/BaseNode.d.ts +60 -0
  183. package/types/scene/Planet.d.ts +576 -0
  184. package/types/scene/RenderNode.d.ts +142 -0
  185. package/types/scene/SkyBox.d.ts +10 -0
  186. package/types/scene/index.d.ts +4 -0
  187. package/types/segment/Segment.d.ts +275 -0
  188. package/types/segment/SegmentLonLat.d.ts +17 -0
  189. package/types/segment/Slice.d.ts +10 -0
  190. package/types/segment/segmentHelper.d.ts +13 -0
  191. package/types/shaders/billboard.d.ts +3 -0
  192. package/types/shaders/depth.d.ts +2 -0
  193. package/types/shaders/drawnode.d.ts +7 -0
  194. package/types/shaders/geoObject.d.ts +3 -0
  195. package/types/shaders/label.d.ts +4 -0
  196. package/types/shaders/pointCloud.d.ts +2 -0
  197. package/types/shaders/polyline.d.ts +3 -0
  198. package/types/shaders/ray.d.ts +2 -0
  199. package/types/shaders/screenFrame.d.ts +2 -0
  200. package/types/shaders/shape.d.ts +4 -0
  201. package/types/shaders/skybox.d.ts +2 -0
  202. package/types/shaders/toneMapping.d.ts +2 -0
  203. package/types/shapes/BaseShape.d.ts +250 -0
  204. package/types/shapes/Sphere.d.ts +41 -0
  205. package/types/terrain/BilTerrain.d.ts +7 -0
  206. package/types/terrain/EmptyTerrain.d.ts +73 -0
  207. package/types/terrain/Geoid.d.ts +26 -0
  208. package/types/terrain/GlobusTerrain.d.ts +116 -0
  209. package/types/terrain/MapboxTerrain.d.ts +7 -0
  210. package/types/terrain/index.d.ts +5 -0
  211. package/types/utils/FontAtlas.d.ts +16 -0
  212. package/types/utils/GeoImageCreator.d.ts +30 -0
  213. package/types/utils/ImagesCacheManager.d.ts +10 -0
  214. package/types/utils/Loader.d.ts +25 -0
  215. package/types/utils/NormalMapCreator.d.ts +39 -0
  216. package/types/utils/PlainSegmentWorker.d.ts +10 -0
  217. package/types/utils/TerrainWorker.d.ts +9 -0
  218. package/types/utils/TextureAtlas.d.ts +111 -0
  219. package/types/utils/VectorTileCreator.d.ts +16 -0
  220. package/types/utils/colorTable.d.ts +143 -0
  221. package/types/utils/earcut.d.ts +6 -0
  222. package/types/utils/shared.d.ts +231 -0
  223. package/types/webgl/Framebuffer.d.ts +135 -0
  224. package/types/webgl/Handler.d.ts +392 -0
  225. package/types/webgl/Multisample.d.ts +89 -0
  226. package/types/webgl/Program.d.ts +163 -0
  227. package/types/webgl/ProgramController.d.ts +89 -0
  228. package/types/webgl/callbacks.d.ts +1 -0
  229. package/types/webgl/index.d.ts +6 -0
  230. package/types/webgl/types.d.ts +2 -0
@@ -1,414 +1,414 @@
1
- /**
2
- * @module og/utils/VectorTileCreator
3
- */
4
-
5
- 'use strict';
6
-
7
- import { doubleToTwoFloats2 } from '../math/coder.js';
8
- import * as quadTree from '../quadTree/quadTree.js';
9
- import { Framebuffer } from '../webgl/Framebuffer.js';
10
- import { Program } from '../webgl/Program.js';
11
-
12
- let tempArr = new Float32Array(2);
13
-
14
- export class VectorTileCreator {
15
-
16
- constructor(planet, maxFrames, width, height) {
17
-
18
- this._width = width || 256;
19
- this._height = height || 256;
20
- this._handler = planet.renderer.handler;
21
- this._planet = planet;
22
- this._framebuffer = null;
23
- this.MAX_FRAMES = maxFrames || 5;
24
- this._currentFrame = 0;
25
- this._queue = [];
26
- this._initialize();
27
- }
28
-
29
- _initialize() {
30
-
31
- //Line
32
- if (!this._handler.programs.vectorTileLineRasterization) {
33
- this._handler.addProgram(new Program("vectorTileLineRasterization", {
34
- uniforms: {
35
- 'viewport': "vec2",
36
- 'thicknessOutline': "float",
37
- 'alpha': "float",
38
- 'extentParamsHigh': "vec4",
39
- 'extentParamsLow': "vec4"
40
- },
41
- attributes: {
42
- 'prevHigh': "vec2",
43
- 'currentHigh': "vec2",
44
- 'nextHigh': "vec2",
45
-
46
- 'prevLow': "vec2",
47
- 'currentLow': "vec2",
48
- 'nextLow': "vec2",
49
-
50
- 'order': "float",
51
- 'color': "vec4",
52
- 'thickness': "float"
53
- },
54
- vertexShader:
55
- `attribute vec2 prevHigh;
56
- attribute vec2 currentHigh;
57
- attribute vec2 nextHigh;
58
-
59
- attribute vec2 prevLow;
60
- attribute vec2 currentLow;
61
- attribute vec2 nextLow;
62
-
63
- attribute float order;
64
- attribute float thickness;
65
- attribute vec4 color;
66
- uniform float thicknessOutline;
67
- uniform vec2 viewport;
68
- uniform vec4 extentParamsHigh;
69
- uniform vec4 extentParamsLow;
70
- varying vec4 vColor;
71
-
72
- vec2 proj(vec2 coordHigh, vec2 coordLow) {
73
- vec2 highDiff = coordHigh - extentParamsHigh.xy;
74
- vec2 lowDiff = coordLow - extentParamsLow.xy;
75
- return vec2(-1.0 + (highDiff + lowDiff) * extentParamsHigh.zw) * vec2(1.0, -1.0);
76
- }
77
-
78
- void main(){
79
- vColor = color;
80
-
81
- vec2 vNext = proj(nextHigh, nextLow),
82
- vCurrent = proj(currentHigh, currentLow),
83
- vPrev = proj(prevHigh, prevLow);
84
-
85
- vec2 _next = vNext;
86
- vec2 _prev = vPrev;
87
- vec2 _current = vCurrent;
88
-
89
- if(_prev == _current){
90
- if(_next == _current){
91
- _next = _current + vec2(1.0, 0.0);
92
- _prev = _current - _next;
93
- }else{
94
- _prev = _current + normalize(_current - _next);
95
- }
96
- }
97
-
98
- if(_next == _current){
99
- _next = _current + normalize(_current - _prev);
100
- }
101
-
102
- vec2 sNext = _next;
103
- vec2 sCurrent = _current;
104
- vec2 sPrev = _prev;
105
-
106
- vec2 dirNext = normalize(sNext - sCurrent);
107
- vec2 dirPrev = normalize(sPrev - sCurrent);
108
- float dotNP = dot(dirNext, dirPrev);
109
-
110
- vec2 normalNext = normalize(vec2(-dirNext.y, dirNext.x));
111
- vec2 normalPrev = normalize(vec2(dirPrev.y, -dirPrev.x));
112
- vec2 d = (thickness + thicknessOutline) * 0.5 * sign(order) / viewport;
113
-
114
- vec2 m;
115
- if(dotNP >= 0.99991){
116
- m = sCurrent - normalPrev * d;
117
- }else{
118
- vec2 dir = normalPrev + normalNext;
119
- m = sCurrent + dir * d / (dirNext.x * dir.y - dirNext.y * dir.x);
120
-
121
- if( dotNP > 0.5 && dot(dirNext + dirPrev, m - sCurrent) < 0.0 ){
122
- float occw = order * sign(dirNext.x * dirPrev.y - dirNext.y * dirPrev.x);
123
- if(occw == -1.0){
124
- m = sCurrent + normalPrev * d;
125
- }else if(occw == 1.0){
126
- m = sCurrent + normalNext * d;
127
- }else if(occw == -2.0){
128
- m = sCurrent + normalNext * d;
129
- }else if(occw == 2.0){
130
- m = sCurrent + normalPrev * d;
131
- }
132
- }else if(distance(sCurrent, m) > min(distance(sCurrent, sNext), distance(sCurrent, sPrev))){
133
- m = sCurrent + normalNext * d;
134
- }
135
- }
136
- gl_Position = vec4(m.x, m.y, 0.0, 1.0);
137
- }`,
138
- fragmentShader: `precision highp float;
139
- uniform float alpha;
140
- varying vec4 vColor;
141
- void main() {
142
- gl_FragColor = vec4(vColor.rgb, alpha * vColor.a);
143
- }`
144
- }));
145
- }
146
-
147
- //Polygon
148
- if (!this._handler.programs.vectorTilePolygonRasterization) {
149
- this._handler.addProgram(new Program("vectorTilePolygonRasterization", {
150
- uniforms: {
151
- 'extentParamsHigh': "vec4",
152
- 'extentParamsLow': "vec4"
153
- },
154
- attributes: {
155
- 'coordinatesHigh': "vec2",
156
- 'coordinatesLow': "vec2",
157
- 'colors': "vec4"
158
- },
159
- vertexShader:
160
- `attribute vec2 coordinatesHigh;
161
- attribute vec2 coordinatesLow;
162
- attribute vec4 colors;
163
- uniform vec4 extentParamsHigh;
164
- uniform vec4 extentParamsLow;
165
- varying vec4 color;
166
-
167
- vec2 proj(vec2 coordHigh, vec2 coordLow) {
168
- vec2 highDiff = coordHigh - extentParamsHigh.xy;
169
- vec2 lowDiff = coordLow - extentParamsLow.xy;
170
- return vec2(-1.0 + (highDiff + lowDiff) * extentParamsHigh.zw) * vec2(1.0, -1.0);
171
- }
172
-
173
- void main() {
174
- color = colors;
175
- gl_Position = vec4(proj(coordinatesHigh, coordinatesLow), 0.0, 1.0);
176
- }`,
177
- fragmentShader:
178
- `precision highp float;
179
- varying vec4 color;
180
- void main () {
181
- gl_FragColor = color;
182
- }`
183
- }));
184
- }
185
-
186
- this._framebuffer = new Framebuffer(this._handler, {
187
- width: this._width,
188
- height: this._height,
189
- useDepth: false
190
- });
191
- this._framebuffer.init();
192
- }
193
-
194
- frame() {
195
- if (this._planet.layerLock.isFree() && this._queue.length) {
196
- var h = this._handler,
197
- gl = h.gl;
198
-
199
- gl.disable(gl.CULL_FACE);
200
- gl.disable(gl.DEPTH_TEST);
201
- gl.enable(gl.BLEND);
202
- gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);
203
- gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
204
-
205
- var hLine = h.programs.vectorTileLineRasterization,
206
- hPoly = h.programs.vectorTilePolygonRasterization;
207
-
208
- var _w = this._width,
209
- _h = this._height,
210
- width = _w,
211
- height = _h,
212
- _w2 = width << 1,
213
- _h2 = height << 1;
214
-
215
- var pickingMask = null,
216
- texture = null;
217
-
218
- // var prevLayerId = -1;
219
-
220
- var extentParamsHigh = new Float32Array(4);
221
- var extentParamsLow = new Float32Array(4);
222
-
223
- var f = this._framebuffer.activate();
224
-
225
- var deltaTime = 0,
226
- startTime = window.performance.now();
227
-
228
- while (this._planet.layerLock.isFree() && this._queue.length && deltaTime < 0.25) {
229
- var material = this._queue.shift();
230
- if (material.isLoading && material.segment.node.getState() === quadTree.RENDERING) {
231
-
232
- if (material.segment.tileZoom <= 3) {
233
- width = _w2;
234
- height = _h2;
235
- } else {
236
- width = _w;
237
- height = _h;
238
- }
239
-
240
- texture = (material._updateTexture && material._updateTexture) || h.createEmptyTexture_l(width, height);
241
-
242
- f.setSize(width, height);
243
-
244
- f.bindOutputTexture(texture);
245
-
246
- gl.clearColor(0.0, 0.0, 0.0, 0.0);
247
- gl.clear(gl.COLOR_BUFFER_BIT);
248
-
249
- var extent = material.segment.getExtentMerc();
250
-
251
- doubleToTwoFloats2(extent.southWest.lon, tempArr);
252
- extentParamsHigh[0] = tempArr[0];
253
- extentParamsLow[0] = tempArr[1];
254
-
255
- doubleToTwoFloats2(extent.southWest.lat, tempArr);
256
- extentParamsHigh[1] = tempArr[0];
257
- extentParamsLow[1] = tempArr[1];
258
-
259
- extentParamsHigh[2] = 2.0 / extent.getWidth();
260
- extentParamsHigh[3] = 2.0 / extent.getHeight();
261
-
262
- hPoly.activate();
263
- var sh = hPoly._program;
264
- var sha = sh.attributes,
265
- shu = sh.uniforms;
266
-
267
- var geomHandler = material.layer._geometryHandler;
268
-
269
- //=========================================
270
- //Polygon rendering
271
- //=========================================
272
- gl.uniform4fv(shu.extentParamsHigh, extentParamsHigh);
273
- gl.uniform4fv(shu.extentParamsLow, extentParamsLow);
274
-
275
- gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._polyVerticesHighBufferMerc);
276
- gl.vertexAttribPointer(sha.coordinatesHigh, geomHandler._polyVerticesHighBufferMerc.itemSize, gl.FLOAT, false, 0, 0);
277
-
278
- gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._polyVerticesLowBufferMerc);
279
- gl.vertexAttribPointer(sha.coordinatesLow, geomHandler._polyVerticesLowBufferMerc.itemSize, gl.FLOAT, false, 0, 0);
280
-
281
- gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._polyColorsBuffer);
282
- gl.vertexAttribPointer(sha.colors, geomHandler._polyColorsBuffer.itemSize, gl.FLOAT, false, 0, 0);
283
-
284
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, geomHandler._polyIndexesBuffer);
285
-
286
- gl.drawElements(gl.TRIANGLES, geomHandler._polyIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
287
-
288
- //Polygon picking PASS
289
- if (material.layer._pickingEnabled) {
290
- if (!material.pickingReady) {
291
- if (material._updatePickingMask) {
292
- pickingMask = material._updatePickingMask;
293
- } else {
294
- pickingMask = h.createEmptyTexture_n(width, height);
295
- }
296
-
297
- f.bindOutputTexture(pickingMask);
298
-
299
- gl.clearColor(0.0, 0.0, 0.0, 0.0);
300
- gl.clear(gl.COLOR_BUFFER_BIT);
301
-
302
- gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._polyPickingColorsBuffer);
303
- gl.vertexAttribPointer(sha.colors, geomHandler._polyPickingColorsBuffer.itemSize, gl.FLOAT, false, 0, 0);
304
-
305
- gl.drawElements(gl.TRIANGLES, geomHandler._polyIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
306
- } else {
307
- pickingMask = material.pickingMask;
308
- }
309
- }
310
-
311
- //=========================================
312
- //Strokes and linestrings rendering
313
- //=========================================
314
- f.bindOutputTexture(texture);
315
-
316
- hLine.activate();
317
- sh = hLine._program;
318
- sha = sh.attributes;
319
- shu = sh.uniforms;
320
-
321
- gl.uniform2fv(shu.viewport, [width, height]);
322
-
323
- gl.uniform4fv(shu.extentParamsHigh, extentParamsHigh);
324
- gl.uniform4fv(shu.extentParamsLow, extentParamsLow);
325
-
326
- //vertex
327
- var mb = geomHandler._lineVerticesHighBufferMerc;
328
- gl.bindBuffer(gl.ARRAY_BUFFER, mb);
329
-
330
- gl.vertexAttribPointer(sha.prevHigh, mb.itemSize, gl.FLOAT, false, 8, 0);
331
- gl.vertexAttribPointer(sha.currentHigh, mb.itemSize, gl.FLOAT, false, 8, 32);
332
- gl.vertexAttribPointer(sha.nextHigh, mb.itemSize, gl.FLOAT, false, 8, 64);
333
-
334
- mb = geomHandler._lineVerticesLowBufferMerc;
335
- gl.bindBuffer(gl.ARRAY_BUFFER, mb);
336
-
337
- gl.vertexAttribPointer(sha.prevLow, mb.itemSize, gl.FLOAT, false, 8, 0);
338
- gl.vertexAttribPointer(sha.currentLow, mb.itemSize, gl.FLOAT, false, 8, 32);
339
- gl.vertexAttribPointer(sha.nextLow, mb.itemSize, gl.FLOAT, false, 8, 64);
340
-
341
- //order
342
- gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._lineOrdersBuffer);
343
- gl.vertexAttribPointer(sha.order, geomHandler._lineOrdersBuffer.itemSize, gl.FLOAT, false, 4, 0);
344
-
345
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, geomHandler._lineIndexesBuffer);
346
-
347
- //PASS - stroke
348
- gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._lineStrokesBuffer);
349
- gl.vertexAttribPointer(sha.thickness, geomHandler._lineStrokesBuffer.itemSize, gl.FLOAT, false, 0, 0);
350
-
351
- gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._lineStrokeColorsBuffer);
352
- gl.vertexAttribPointer(sha.color, geomHandler._lineStrokeColorsBuffer.itemSize, gl.FLOAT, false, 0, 0);
353
-
354
- //Antialias pass
355
- gl.uniform1f(shu.thicknessOutline, 2);
356
- gl.uniform1f(shu.alpha, 0.54);
357
- gl.drawElements(gl.TRIANGLE_STRIP, geomHandler._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
358
- //
359
- //Aliased pass
360
- gl.uniform1f(shu.thicknessOutline, 1);
361
- gl.uniform1f(shu.alpha, 1.0);
362
- gl.drawElements(gl.TRIANGLE_STRIP, geomHandler._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
363
-
364
- //PASS - inside line
365
- gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._lineThicknessBuffer);
366
- gl.vertexAttribPointer(sha.thickness, geomHandler._lineThicknessBuffer.itemSize, gl.FLOAT, false, 0, 0);
367
-
368
- gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._lineColorsBuffer);
369
- gl.vertexAttribPointer(sha.color, geomHandler._lineColorsBuffer.itemSize, gl.FLOAT, false, 0, 0);
370
-
371
- //Antialias pass
372
- gl.uniform1f(shu.thicknessOutline, 2);
373
- gl.uniform1f(shu.alpha, 0.54);
374
- gl.drawElements(gl.TRIANGLE_STRIP, geomHandler._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
375
- //
376
- //Aliased pass
377
- gl.uniform1f(shu.thicknessOutline, 1);
378
- gl.uniform1f(shu.alpha, 1.0);
379
- gl.drawElements(gl.TRIANGLE_STRIP, geomHandler._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
380
-
381
- if (material.layer._pickingEnabled && !material.pickingReady) {
382
- f.bindOutputTexture(pickingMask);
383
- gl.uniform1f(shu.thicknessOutline, 8);
384
- gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._linePickingColorsBuffer);
385
- gl.vertexAttribPointer(sha.color, geomHandler._linePickingColorsBuffer.itemSize, gl.FLOAT, false, 0, 0);
386
- gl.drawElements(gl.TRIANGLE_STRIP, geomHandler._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
387
- }
388
-
389
- material.applyTexture(texture, pickingMask);
390
-
391
- } else {
392
- material.isLoading = false;
393
- }
394
-
395
- deltaTime = window.performance.now() - startTime;
396
- // prevLayerId = material.layer._id;
397
- }
398
-
399
- gl.disable(gl.BLEND);
400
- gl.enable(gl.DEPTH_TEST);
401
- gl.enable(gl.CULL_FACE);
402
-
403
- f.deactivate();
404
- }
405
- }
406
-
407
- add(material) {
408
- this._queue.push(material);
409
- }
410
-
411
- remove(material) {
412
- //...
413
- }
414
- }
1
+ /**
2
+ * @module og/utils/VectorTileCreator
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ import { doubleToTwoFloats2 } from '../math/coder.js';
8
+ import * as quadTree from '../quadTree/quadTree.js';
9
+ import { Framebuffer } from '../webgl/Framebuffer.js';
10
+ import { Program } from '../webgl/Program.js';
11
+
12
+ let tempArr = new Float32Array(2);
13
+
14
+ export class VectorTileCreator {
15
+
16
+ constructor(planet, maxFrames = 5, width = 256, height = 256) {
17
+
18
+ this._width = width;
19
+ this._height = height;
20
+ this._handler = planet.renderer.handler;
21
+ this._planet = planet;
22
+ this._framebuffer = null;
23
+ this.MAX_FRAMES = maxFrames;
24
+ this._currentFrame = 0;
25
+ this._queue = [];
26
+ this._initialize();
27
+ }
28
+
29
+ _initialize() {
30
+
31
+ //Line
32
+ if (!this._handler.programs.vectorTileLineRasterization) {
33
+ this._handler.addProgram(new Program("vectorTileLineRasterization", {
34
+ uniforms: {
35
+ 'viewport': "vec2",
36
+ 'thicknessOutline': "float",
37
+ 'alpha': "float",
38
+ 'extentParamsHigh': "vec4",
39
+ 'extentParamsLow': "vec4"
40
+ },
41
+ attributes: {
42
+ 'prevHigh': "vec2",
43
+ 'currentHigh': "vec2",
44
+ 'nextHigh': "vec2",
45
+
46
+ 'prevLow': "vec2",
47
+ 'currentLow': "vec2",
48
+ 'nextLow': "vec2",
49
+
50
+ 'order': "float",
51
+ 'color': "vec4",
52
+ 'thickness': "float"
53
+ },
54
+ vertexShader:
55
+ `attribute vec2 prevHigh;
56
+ attribute vec2 currentHigh;
57
+ attribute vec2 nextHigh;
58
+
59
+ attribute vec2 prevLow;
60
+ attribute vec2 currentLow;
61
+ attribute vec2 nextLow;
62
+
63
+ attribute float order;
64
+ attribute float thickness;
65
+ attribute vec4 color;
66
+ uniform float thicknessOutline;
67
+ uniform vec2 viewport;
68
+ uniform vec4 extentParamsHigh;
69
+ uniform vec4 extentParamsLow;
70
+ varying vec4 vColor;
71
+
72
+ vec2 proj(vec2 coordHigh, vec2 coordLow) {
73
+ vec2 highDiff = coordHigh - extentParamsHigh.xy;
74
+ vec2 lowDiff = coordLow - extentParamsLow.xy;
75
+ return vec2(-1.0 + (highDiff + lowDiff) * extentParamsHigh.zw) * vec2(1.0, -1.0);
76
+ }
77
+
78
+ void main(){
79
+ vColor = color;
80
+
81
+ vec2 vNext = proj(nextHigh, nextLow),
82
+ vCurrent = proj(currentHigh, currentLow),
83
+ vPrev = proj(prevHigh, prevLow);
84
+
85
+ vec2 _next = vNext;
86
+ vec2 _prev = vPrev;
87
+ vec2 _current = vCurrent;
88
+
89
+ if(_prev == _current){
90
+ if(_next == _current){
91
+ _next = _current + vec2(1.0, 0.0);
92
+ _prev = _current - _next;
93
+ }else{
94
+ _prev = _current + normalize(_current - _next);
95
+ }
96
+ }
97
+
98
+ if(_next == _current){
99
+ _next = _current + normalize(_current - _prev);
100
+ }
101
+
102
+ vec2 sNext = _next;
103
+ vec2 sCurrent = _current;
104
+ vec2 sPrev = _prev;
105
+
106
+ vec2 dirNext = normalize(sNext - sCurrent);
107
+ vec2 dirPrev = normalize(sPrev - sCurrent);
108
+ float dotNP = dot(dirNext, dirPrev);
109
+
110
+ vec2 normalNext = normalize(vec2(-dirNext.y, dirNext.x));
111
+ vec2 normalPrev = normalize(vec2(dirPrev.y, -dirPrev.x));
112
+ vec2 d = (thickness + thicknessOutline) * 0.5 * sign(order) / viewport;
113
+
114
+ vec2 m;
115
+ if(dotNP >= 0.99991){
116
+ m = sCurrent - normalPrev * d;
117
+ }else{
118
+ vec2 dir = normalPrev + normalNext;
119
+ m = sCurrent + dir * d / (dirNext.x * dir.y - dirNext.y * dir.x);
120
+
121
+ if( dotNP > 0.5 && dot(dirNext + dirPrev, m - sCurrent) < 0.0 ){
122
+ float occw = order * sign(dirNext.x * dirPrev.y - dirNext.y * dirPrev.x);
123
+ if(occw == -1.0){
124
+ m = sCurrent + normalPrev * d;
125
+ }else if(occw == 1.0){
126
+ m = sCurrent + normalNext * d;
127
+ }else if(occw == -2.0){
128
+ m = sCurrent + normalNext * d;
129
+ }else if(occw == 2.0){
130
+ m = sCurrent + normalPrev * d;
131
+ }
132
+ }else if(distance(sCurrent, m) > min(distance(sCurrent, sNext), distance(sCurrent, sPrev))){
133
+ m = sCurrent + normalNext * d;
134
+ }
135
+ }
136
+ gl_Position = vec4(m.x, m.y, 0.0, 1.0);
137
+ }`,
138
+ fragmentShader: `precision highp float;
139
+ uniform float alpha;
140
+ varying vec4 vColor;
141
+ void main() {
142
+ gl_FragColor = vec4(vColor.rgb, alpha * vColor.a);
143
+ }`
144
+ }));
145
+ }
146
+
147
+ //Polygon
148
+ if (!this._handler.programs.vectorTilePolygonRasterization) {
149
+ this._handler.addProgram(new Program("vectorTilePolygonRasterization", {
150
+ uniforms: {
151
+ 'extentParamsHigh': "vec4",
152
+ 'extentParamsLow': "vec4"
153
+ },
154
+ attributes: {
155
+ 'coordinatesHigh': "vec2",
156
+ 'coordinatesLow': "vec2",
157
+ 'colors': "vec4"
158
+ },
159
+ vertexShader:
160
+ `attribute vec2 coordinatesHigh;
161
+ attribute vec2 coordinatesLow;
162
+ attribute vec4 colors;
163
+ uniform vec4 extentParamsHigh;
164
+ uniform vec4 extentParamsLow;
165
+ varying vec4 color;
166
+
167
+ vec2 proj(vec2 coordHigh, vec2 coordLow) {
168
+ vec2 highDiff = coordHigh - extentParamsHigh.xy;
169
+ vec2 lowDiff = coordLow - extentParamsLow.xy;
170
+ return vec2(-1.0 + (highDiff + lowDiff) * extentParamsHigh.zw) * vec2(1.0, -1.0);
171
+ }
172
+
173
+ void main() {
174
+ color = colors;
175
+ gl_Position = vec4(proj(coordinatesHigh, coordinatesLow), 0.0, 1.0);
176
+ }`,
177
+ fragmentShader:
178
+ `precision highp float;
179
+ varying vec4 color;
180
+ void main () {
181
+ gl_FragColor = color;
182
+ }`
183
+ }));
184
+ }
185
+
186
+ this._framebuffer = new Framebuffer(this._handler, {
187
+ width: this._width,
188
+ height: this._height,
189
+ useDepth: false
190
+ });
191
+ this._framebuffer.init();
192
+ }
193
+
194
+ frame() {
195
+ if (this._planet.layerLock.isFree() && this._queue.length) {
196
+ var h = this._handler,
197
+ gl = h.gl;
198
+
199
+ gl.disable(gl.CULL_FACE);
200
+ gl.disable(gl.DEPTH_TEST);
201
+ gl.enable(gl.BLEND);
202
+ gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);
203
+ gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
204
+
205
+ var hLine = h.programs.vectorTileLineRasterization,
206
+ hPoly = h.programs.vectorTilePolygonRasterization;
207
+
208
+ var _w = this._width,
209
+ _h = this._height,
210
+ width = _w,
211
+ height = _h,
212
+ _w2 = width << 1,
213
+ _h2 = height << 1;
214
+
215
+ var pickingMask = null,
216
+ texture = null;
217
+
218
+ // var prevLayerId = -1;
219
+
220
+ var extentParamsHigh = new Float32Array(4);
221
+ var extentParamsLow = new Float32Array(4);
222
+
223
+ var f = this._framebuffer.activate();
224
+
225
+ var deltaTime = 0,
226
+ startTime = window.performance.now();
227
+
228
+ while (this._planet.layerLock.isFree() && this._queue.length && deltaTime < 0.25) {
229
+ var material = this._queue.shift();
230
+ if (material.isLoading && material.segment.node.getState() === quadTree.RENDERING) {
231
+
232
+ if (material.segment.tileZoom <= 3) {
233
+ width = _w2;
234
+ height = _h2;
235
+ } else {
236
+ width = _w;
237
+ height = _h;
238
+ }
239
+
240
+ texture = (material._updateTexture && material._updateTexture) || h.createEmptyTexture_l(width, height);
241
+
242
+ f.setSize(width, height);
243
+
244
+ f.bindOutputTexture(texture);
245
+
246
+ gl.clearColor(0.0, 0.0, 0.0, 0.0);
247
+ gl.clear(gl.COLOR_BUFFER_BIT);
248
+
249
+ var extent = material.segment.getExtentMerc();
250
+
251
+ doubleToTwoFloats2(extent.southWest.lon, tempArr);
252
+ extentParamsHigh[0] = tempArr[0];
253
+ extentParamsLow[0] = tempArr[1];
254
+
255
+ doubleToTwoFloats2(extent.southWest.lat, tempArr);
256
+ extentParamsHigh[1] = tempArr[0];
257
+ extentParamsLow[1] = tempArr[1];
258
+
259
+ extentParamsHigh[2] = 2.0 / extent.getWidth();
260
+ extentParamsHigh[3] = 2.0 / extent.getHeight();
261
+
262
+ hPoly.activate();
263
+ var sh = hPoly._program;
264
+ var sha = sh.attributes,
265
+ shu = sh.uniforms;
266
+
267
+ var geomHandler = material.layer._geometryHandler;
268
+
269
+ //=========================================
270
+ //Polygon rendering
271
+ //=========================================
272
+ gl.uniform4fv(shu.extentParamsHigh, extentParamsHigh);
273
+ gl.uniform4fv(shu.extentParamsLow, extentParamsLow);
274
+
275
+ gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._polyVerticesHighBufferMerc);
276
+ gl.vertexAttribPointer(sha.coordinatesHigh, geomHandler._polyVerticesHighBufferMerc.itemSize, gl.FLOAT, false, 0, 0);
277
+
278
+ gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._polyVerticesLowBufferMerc);
279
+ gl.vertexAttribPointer(sha.coordinatesLow, geomHandler._polyVerticesLowBufferMerc.itemSize, gl.FLOAT, false, 0, 0);
280
+
281
+ gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._polyColorsBuffer);
282
+ gl.vertexAttribPointer(sha.colors, geomHandler._polyColorsBuffer.itemSize, gl.FLOAT, false, 0, 0);
283
+
284
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, geomHandler._polyIndexesBuffer);
285
+
286
+ gl.drawElements(gl.TRIANGLES, geomHandler._polyIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
287
+
288
+ //Polygon picking PASS
289
+ if (material.layer._pickingEnabled) {
290
+ if (!material.pickingReady) {
291
+ if (material._updatePickingMask) {
292
+ pickingMask = material._updatePickingMask;
293
+ } else {
294
+ pickingMask = h.createEmptyTexture_n(width, height);
295
+ }
296
+
297
+ f.bindOutputTexture(pickingMask);
298
+
299
+ gl.clearColor(0.0, 0.0, 0.0, 0.0);
300
+ gl.clear(gl.COLOR_BUFFER_BIT);
301
+
302
+ gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._polyPickingColorsBuffer);
303
+ gl.vertexAttribPointer(sha.colors, geomHandler._polyPickingColorsBuffer.itemSize, gl.FLOAT, false, 0, 0);
304
+
305
+ gl.drawElements(gl.TRIANGLES, geomHandler._polyIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
306
+ } else {
307
+ pickingMask = material.pickingMask;
308
+ }
309
+ }
310
+
311
+ //=========================================
312
+ //Strokes and linestrings rendering
313
+ //=========================================
314
+ f.bindOutputTexture(texture);
315
+
316
+ hLine.activate();
317
+ sh = hLine._program;
318
+ sha = sh.attributes;
319
+ shu = sh.uniforms;
320
+
321
+ gl.uniform2fv(shu.viewport, [width, height]);
322
+
323
+ gl.uniform4fv(shu.extentParamsHigh, extentParamsHigh);
324
+ gl.uniform4fv(shu.extentParamsLow, extentParamsLow);
325
+
326
+ //vertex
327
+ var mb = geomHandler._lineVerticesHighBufferMerc;
328
+ gl.bindBuffer(gl.ARRAY_BUFFER, mb);
329
+
330
+ gl.vertexAttribPointer(sha.prevHigh, mb.itemSize, gl.FLOAT, false, 8, 0);
331
+ gl.vertexAttribPointer(sha.currentHigh, mb.itemSize, gl.FLOAT, false, 8, 32);
332
+ gl.vertexAttribPointer(sha.nextHigh, mb.itemSize, gl.FLOAT, false, 8, 64);
333
+
334
+ mb = geomHandler._lineVerticesLowBufferMerc;
335
+ gl.bindBuffer(gl.ARRAY_BUFFER, mb);
336
+
337
+ gl.vertexAttribPointer(sha.prevLow, mb.itemSize, gl.FLOAT, false, 8, 0);
338
+ gl.vertexAttribPointer(sha.currentLow, mb.itemSize, gl.FLOAT, false, 8, 32);
339
+ gl.vertexAttribPointer(sha.nextLow, mb.itemSize, gl.FLOAT, false, 8, 64);
340
+
341
+ //order
342
+ gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._lineOrdersBuffer);
343
+ gl.vertexAttribPointer(sha.order, geomHandler._lineOrdersBuffer.itemSize, gl.FLOAT, false, 4, 0);
344
+
345
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, geomHandler._lineIndexesBuffer);
346
+
347
+ //PASS - stroke
348
+ gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._lineStrokesBuffer);
349
+ gl.vertexAttribPointer(sha.thickness, geomHandler._lineStrokesBuffer.itemSize, gl.FLOAT, false, 0, 0);
350
+
351
+ gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._lineStrokeColorsBuffer);
352
+ gl.vertexAttribPointer(sha.color, geomHandler._lineStrokeColorsBuffer.itemSize, gl.FLOAT, false, 0, 0);
353
+
354
+ //Antialias pass
355
+ gl.uniform1f(shu.thicknessOutline, 2);
356
+ gl.uniform1f(shu.alpha, 0.54);
357
+ gl.drawElements(gl.TRIANGLE_STRIP, geomHandler._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
358
+ //
359
+ //Aliased pass
360
+ gl.uniform1f(shu.thicknessOutline, 1);
361
+ gl.uniform1f(shu.alpha, 1.0);
362
+ gl.drawElements(gl.TRIANGLE_STRIP, geomHandler._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
363
+
364
+ //PASS - inside line
365
+ gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._lineThicknessBuffer);
366
+ gl.vertexAttribPointer(sha.thickness, geomHandler._lineThicknessBuffer.itemSize, gl.FLOAT, false, 0, 0);
367
+
368
+ gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._lineColorsBuffer);
369
+ gl.vertexAttribPointer(sha.color, geomHandler._lineColorsBuffer.itemSize, gl.FLOAT, false, 0, 0);
370
+
371
+ //Antialias pass
372
+ gl.uniform1f(shu.thicknessOutline, 2);
373
+ gl.uniform1f(shu.alpha, 0.54);
374
+ gl.drawElements(gl.TRIANGLE_STRIP, geomHandler._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
375
+ //
376
+ //Aliased pass
377
+ gl.uniform1f(shu.thicknessOutline, 1);
378
+ gl.uniform1f(shu.alpha, 1.0);
379
+ gl.drawElements(gl.TRIANGLE_STRIP, geomHandler._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
380
+
381
+ if (material.layer._pickingEnabled && !material.pickingReady) {
382
+ f.bindOutputTexture(pickingMask);
383
+ gl.uniform1f(shu.thicknessOutline, 8);
384
+ gl.bindBuffer(gl.ARRAY_BUFFER, geomHandler._linePickingColorsBuffer);
385
+ gl.vertexAttribPointer(sha.color, geomHandler._linePickingColorsBuffer.itemSize, gl.FLOAT, false, 0, 0);
386
+ gl.drawElements(gl.TRIANGLE_STRIP, geomHandler._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
387
+ }
388
+
389
+ material.applyTexture(texture, pickingMask);
390
+
391
+ } else {
392
+ material.isLoading = false;
393
+ }
394
+
395
+ deltaTime = window.performance.now() - startTime;
396
+ // prevLayerId = material.layer._id;
397
+ }
398
+
399
+ gl.disable(gl.BLEND);
400
+ gl.enable(gl.DEPTH_TEST);
401
+ gl.enable(gl.CULL_FACE);
402
+
403
+ f.deactivate();
404
+ }
405
+ }
406
+
407
+ add(material) {
408
+ this._queue.push(material);
409
+ }
410
+
411
+ remove(material) {
412
+ //...
413
+ }
414
+ }