@pirireis/webglobeplugins 0.17.1 → 1.0.2

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 (272) hide show
  1. package/Math/{angle-calculation.js → angle-calculation.ts} +18 -14
  2. package/Math/{arc-cdf-points.js → arc-cdf-points.ts} +329 -272
  3. package/Math/{arc-generate-points-exponantial.js → arc-generate-points-exponantial.ts} +299 -254
  4. package/Math/{arc.js → arc.ts} +421 -292
  5. package/Math/bounds/line-bbox.js +225 -186
  6. package/Math/{circle-cdf-points.js → circle-cdf-points.ts} +143 -78
  7. package/Math/{circle.js → circle.ts} +49 -33
  8. package/Math/{constants.js → constants.ts} +12 -4
  9. package/Math/contour/{quadtreecontours.js → quadtreecontours.ts} +371 -300
  10. package/Math/contour/quadtreecontours1.js +336 -298
  11. package/Math/{finite-line-2d.js → finite-line-2d.ts} +68 -58
  12. package/Math/haversine.ts +33 -0
  13. package/Math/index.js +0 -1
  14. package/Math/juction/{arc-plane.js → arc-plane.ts} +203 -143
  15. package/Math/juction/{line-sphere.js → line-sphere.ts} +32 -22
  16. package/Math/juction/{plane-plane.js → plane-plane.ts} +62 -53
  17. package/Math/{line.js → line.ts} +84 -52
  18. package/Math/matrix4.ts +0 -0
  19. package/Math/mesh/mapbox-delaunay.d.ts +74 -0
  20. package/Math/{methods.js → methods.ts} +182 -113
  21. package/Math/{plane.js → plane.ts} +92 -56
  22. package/Math/{quaternion.js → quaternion.ts} +128 -106
  23. package/Math/roadmap.md +10 -0
  24. package/Math/templete-shapes/{grid-visually-equal.js → grid-visually-equal.ts} +118 -65
  25. package/Math/tessellation/constants.ts +1 -0
  26. package/Math/tessellation/methods.ts +79 -0
  27. package/Math/tessellation/nearest-value-padding.ts +147 -0
  28. package/Math/tessellation/roadmap.md +48 -0
  29. package/Math/tessellation/spherical-triangle-area.ts +127 -0
  30. package/Math/tessellation/tile-merger.ts +578 -0
  31. package/Math/tessellation/triangle-tessellation.ts +533 -0
  32. package/Math/tessellation/types.ts +1 -0
  33. package/Math/types.ts +68 -0
  34. package/Math/utils.js +3 -2
  35. package/Math/{vec3.js → vec3.ts} +227 -151
  36. package/Math/xyz-tile.ts +26 -0
  37. package/algorithms/search-binary.js +14 -16
  38. package/altitude-locator/adaptors.js +0 -1
  39. package/altitude-locator/keymethod.js +0 -1
  40. package/altitude-locator/plugin.js +445 -345
  41. package/altitude-locator/types.js +26 -21
  42. package/compass-rose/compass-rose-padding-flat.js +274 -230
  43. package/compass-rose/{compass-text-writer.js → compass-text-writer.ts} +210 -155
  44. package/compass-rose/index.js +3 -3
  45. package/{constants.js → constants.ts} +8 -6
  46. package/heatwave/datamanager.js +168 -149
  47. package/heatwave/heatwave.js +261 -206
  48. package/heatwave/index.js +5 -5
  49. package/heatwave/isobar.js +340 -303
  50. package/heatwave/{texture-point-sampler.js → texture-point-sampler.ts} +220 -187
  51. package/investigation-tools/draw/tiles/adapters.ts +133 -0
  52. package/investigation-tools/draw/tiles/{tiles.js → tiles.ts} +162 -128
  53. package/jest.config.js +6 -7
  54. package/package.json +1 -1
  55. package/pin/pin-object-array1.js +381 -300
  56. package/pin/pin-point-totem1.js +77 -60
  57. package/programs/arrowfield/arrow-field.js +89 -60
  58. package/programs/arrowfield/logic.js +173 -141
  59. package/programs/data2legend/density-to-legend.js +86 -68
  60. package/programs/data2legend/point-to-density-texture.js +84 -67
  61. package/programs/float2legendwithratio/index.js +3 -2
  62. package/programs/float2legendwithratio/logic.js +144 -118
  63. package/programs/float2legendwithratio/object.js +141 -104
  64. package/programs/helpers/blender.js +73 -58
  65. package/programs/helpers/{fadeaway.js → fadeaway.ts} +73 -55
  66. package/programs/index.js +19 -20
  67. package/programs/line-on-globe/circle-accurate-3d.js +112 -85
  68. package/programs/line-on-globe/circle-accurate-flat.js +200 -148
  69. package/programs/line-on-globe/degree-padding-around-circle-3d.js +134 -102
  70. package/programs/line-on-globe/index.js +0 -1
  71. package/programs/line-on-globe/lines-color-instanced-flat.js +99 -80
  72. package/programs/line-on-globe/linestrip/data.ts +29 -0
  73. package/programs/line-on-globe/linestrip/{linestrip.js → linestrip.ts} +152 -93
  74. package/programs/line-on-globe/{naive-accurate-flexible.js → naive-accurate-flexible.ts} +175 -126
  75. package/programs/line-on-globe/util.js +8 -5
  76. package/programs/picking/pickable-polygon-renderer.js +129 -98
  77. package/programs/picking/pickable-renderer.js +130 -98
  78. package/programs/point-on-globe/element-globe-surface-glow.js +122 -93
  79. package/programs/point-on-globe/element-point-glow.js +114 -80
  80. package/programs/point-on-globe/square-pixel-point.js +139 -120
  81. package/programs/polygon-on-globe/roadmap.md +8 -0
  82. package/programs/polygon-on-globe/texture-dem-triangles.ts +290 -0
  83. package/programs/{programcache.js → programcache.ts} +134 -126
  84. package/programs/rings/index.js +1 -1
  85. package/programs/rings/partial-ring/{piece-of-pie.js → piece-of-pie.ts} +222 -152
  86. package/programs/totems/camera-totem-attactment-interface.ts +4 -0
  87. package/programs/totems/{camerauniformblock.js → camerauniformblock.ts} +326 -230
  88. package/programs/totems/{canvas-webglobe-info.js → canvas-webglobe-info.ts} +147 -132
  89. package/programs/totems/dem-textures-manager.ts +368 -0
  90. package/programs/totems/{globe-changes.js → globe-changes.ts} +79 -59
  91. package/programs/totems/gpu-selection-uniform-block.js +127 -99
  92. package/programs/totems/{index.js → index.ts} +2 -2
  93. package/programs/two-d/pixel-padding-for-compass.js +101 -87
  94. package/programs/util.js +19 -14
  95. package/programs/vectorfields/logics/{constants.js → constants.ts} +5 -4
  96. package/programs/vectorfields/logics/drawrectangleparticles.ts +182 -0
  97. package/programs/vectorfields/logics/index.js +4 -2
  98. package/programs/vectorfields/logics/particle-ubo.ts +23 -0
  99. package/programs/vectorfields/logics/{pixelbased.js → pixelbased.ts} +119 -84
  100. package/programs/vectorfields/logics/ubo.js +57 -51
  101. package/programs/vectorfields/{pingpongbuffermanager.js → pingpongbuffermanager.ts} +113 -73
  102. package/publish.bat +62 -0
  103. package/range-tools-on-terrain/bearing-line/{adapters.js → adapters.ts} +154 -114
  104. package/range-tools-on-terrain/bearing-line/{plugin.js → plugin.ts} +569 -457
  105. package/range-tools-on-terrain/bearing-line/types.ts +65 -0
  106. package/range-tools-on-terrain/circle-line-chain/{adapters.js → adapters.ts} +104 -85
  107. package/range-tools-on-terrain/circle-line-chain/{chain-list-map.js → chain-list-map.ts} +446 -382
  108. package/range-tools-on-terrain/circle-line-chain/{plugin.js → plugin.ts} +607 -464
  109. package/range-tools-on-terrain/circle-line-chain/types.ts +43 -0
  110. package/range-tools-on-terrain/range-ring/{adapters.js → adapters.ts} +114 -93
  111. package/range-tools-on-terrain/range-ring/{enum.js → enum.ts} +2 -2
  112. package/range-tools-on-terrain/range-ring/{plugin.js → plugin.ts} +444 -377
  113. package/range-tools-on-terrain/range-ring/rangeringangletext.ts +396 -0
  114. package/range-tools-on-terrain/range-ring/types.ts +30 -0
  115. package/semiplugins/interface.ts +14 -0
  116. package/semiplugins/lightweight/{line-plugin.js → line-plugin.ts} +342 -221
  117. package/semiplugins/lightweight/{piece-of-pie-plugin.js → piece-of-pie-plugin.ts} +275 -200
  118. package/semiplugins/shape-on-terrain/{arc-plugin.js → arc-plugin.ts} +616 -481
  119. package/semiplugins/shape-on-terrain/{circle-plugin.js → circle-plugin.ts} +588 -444
  120. package/semiplugins/shape-on-terrain/goal.md +12 -0
  121. package/semiplugins/shape-on-terrain/{padding-1-degree.js → padding-1-degree.ts} +713 -539
  122. package/semiplugins/shape-on-terrain/terrain-polygon/adapters.ts +69 -0
  123. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache-shortcuts.md +20 -0
  124. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache.ts +149 -0
  125. package/semiplugins/shape-on-terrain/terrain-polygon/data/index-polygon-map.ts +58 -0
  126. package/semiplugins/shape-on-terrain/terrain-polygon/data/manager.ts +4 -0
  127. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +196 -0
  128. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.ts +209 -0
  129. package/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.ts +144 -0
  130. package/semiplugins/shape-on-terrain/terrain-polygon/data/random.ts +165 -0
  131. package/semiplugins/shape-on-terrain/terrain-polygon/data/readme.md +5 -0
  132. package/semiplugins/shape-on-terrain/terrain-polygon/data/types.ts +37 -0
  133. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker-contact.ts +81 -0
  134. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +146 -0
  135. package/semiplugins/shape-on-terrain/terrain-polygon/notes.md +90 -0
  136. package/semiplugins/shape-on-terrain/terrain-polygon/terrain-polygon.ts +265 -0
  137. package/semiplugins/shape-on-terrain/terrain-polygon/types.ts +69 -0
  138. package/semiplugins/shell/bbox-renderer/index.ts +2 -0
  139. package/semiplugins/shell/bbox-renderer/{logic.js → logic.ts} +273 -249
  140. package/semiplugins/shell/bbox-renderer/object.ts +129 -0
  141. package/semiplugins/type.ts +8 -0
  142. package/semiplugins/utility/{container-plugin.js → container-plugin.ts} +126 -94
  143. package/semiplugins/utility/{object-pass-container-plugin.js → object-pass-container-plugin.ts} +101 -80
  144. package/shaders/fragment-toy/firework.js +1 -1
  145. package/shaders/fragment-toy/singularity.js +5 -2
  146. package/terrain-plugin.mmd +83 -0
  147. package/tests/Math/arc-sampling-test.js +367 -0
  148. package/tests/Math/arc-sampling-test.ts +429 -0
  149. package/tests/Math/arc.test.ts +77 -0
  150. package/tests/Math/junction/arc-limit.test.ts +7 -0
  151. package/tests/Math/junction/arc-plane-points.test.ts +196 -0
  152. package/tests/Math/junction/arc-plane.test.ts +172 -0
  153. package/tests/Math/junction/line-sphere.test.ts +127 -0
  154. package/tests/Math/junction/plane-plane.test.ts +91 -0
  155. package/tests/Math/plane-test.ts +17 -0
  156. package/tests/Math/plane.test.ts +43 -0
  157. package/tests/Math/vec3.test.ts +33 -0
  158. package/tracks/point-heat-map/adaptors/timetracksplugin-format-to-this.js +78 -63
  159. package/tracks/point-heat-map/index.js +0 -1
  160. package/tracks/point-heat-map/plugin-webworker.js +148 -121
  161. package/tracks/point-heat-map/point-to-heat-map-flow.js +150 -121
  162. package/tracks/point-heat-map/readme.md +15 -0
  163. package/tracks/point-tracks/key-methods.js +3 -2
  164. package/tracks/point-tracks/plugin.js +487 -394
  165. package/tracks/timetracks/adaptors-line-strip.js +79 -65
  166. package/tracks/timetracks/plugin-line-strip.js +295 -240
  167. package/tracks/timetracks/program-line-strip.js +495 -411
  168. package/tracks/timetracks/programpoint-line-strip.js +137 -109
  169. package/tracks/timetracks/readme.md +1 -0
  170. package/tsconfig.json +22 -0
  171. package/types/@pirireis/webglobe.d.ts +102 -0
  172. package/types/delaunator.d.ts +40 -0
  173. package/types/earcut.d.ts +11 -0
  174. package/types/rbush.d.ts +57 -0
  175. package/types.ts +319 -0
  176. package/util/account/bufferoffsetmanager.js +209 -176
  177. package/util/account/create-buffermap-orchastration.ts +85 -0
  178. package/util/account/index.js +6 -3
  179. package/util/account/single-attribute-buffer-management/{buffer-manager.js → buffer-manager.ts} +151 -117
  180. package/util/account/single-attribute-buffer-management/{buffer-orchestrator.js → buffer-orchestrator.ts} +238 -212
  181. package/util/account/single-attribute-buffer-management/{buffer-orchestrator1.js → buffer-orchestrator1.ts} +184 -159
  182. package/util/account/single-attribute-buffer-management/{index.js → index.ts} +11 -4
  183. package/util/account/single-attribute-buffer-management/{object-store.js → object-store.ts} +76 -55
  184. package/util/account/single-attribute-buffer-management/types.ts +43 -0
  185. package/util/account/util.js +22 -18
  186. package/util/algorithms/index.js +0 -1
  187. package/util/algorithms/search-binary.js +26 -25
  188. package/util/build-strategy/{static-dynamic.js → static-dynamic.ts} +50 -41
  189. package/util/check/index.js +0 -1
  190. package/util/check/typecheck.ts +74 -0
  191. package/util/{frame-counter-trigger.js → frame-counter-trigger.ts} +99 -84
  192. package/util/geometry/{index.js → index.ts} +155 -121
  193. package/util/gl-util/buffer/{attribute-loader.js → attribute-loader.ts} +84 -62
  194. package/util/gl-util/buffer/{index.js → index.ts} +6 -3
  195. package/util/gl-util/draw-options/{methods.js → methods.ts} +47 -32
  196. package/util/gl-util/uniform-block/{manager.js → manager.ts} +232 -190
  197. package/util/{webglobe/gldefaultstates.js → globe-default-gl-states.ts} +5 -4
  198. package/util/helper-methods.ts +9 -0
  199. package/util/index.js +9 -10
  200. package/util/interpolation/index.js +0 -1
  201. package/util/interpolation/timetrack/index.js +9 -2
  202. package/util/interpolation/timetrack/timetrack-interpolator.js +94 -79
  203. package/util/interpolation/timetrack/web-worker.js +51 -46
  204. package/util/picking/{fence.js → fence.ts} +47 -41
  205. package/util/picking/picker-displayer.ts +226 -0
  206. package/util/programs/draw-from-pixel-coords.js +201 -164
  207. package/util/programs/{draw-texture-on-canvas.js → draw-texture-on-canvas.ts} +92 -67
  208. package/util/programs/supersampletotextures.js +130 -97
  209. package/util/programs/texturetoglobe.js +153 -128
  210. package/util/shaderfunctions/{geometrytransformations.js → geometrytransformations.ts} +169 -41
  211. package/util/shaderfunctions/index.js +2 -2
  212. package/util/shaderfunctions/nodata.js +4 -2
  213. package/util/shaderfunctions/noisefunctions.js +10 -7
  214. package/util/{webglobjectbuilders.js → webglobjectbuilders.ts} +446 -358
  215. package/vectorfield/arrowfield/adaptor.js +11 -11
  216. package/vectorfield/arrowfield/index.js +3 -3
  217. package/vectorfield/arrowfield/plugin.js +128 -83
  218. package/vectorfield/waveparticles/adaptor.js +16 -15
  219. package/vectorfield/waveparticles/index.js +3 -3
  220. package/vectorfield/waveparticles/plugin.ts +506 -0
  221. package/vectorfield/wind/adapters/image-to-fields.ts +74 -0
  222. package/vectorfield/wind/adapters/types.ts +12 -0
  223. package/vectorfield/wind/{imagetovectorfieldandmagnitude.js → imagetovectorfieldandmagnitude.ts} +78 -56
  224. package/vectorfield/wind/index.js +5 -5
  225. package/vectorfield/wind/plugin-persistant copy.ts +461 -0
  226. package/vectorfield/wind/plugin-persistant.ts +483 -0
  227. package/vectorfield/wind/plugin.js +883 -685
  228. package/vectorfield/wind/vectorfieldimage.js +27 -23
  229. package/write-text/{context-text-bulk.js → context-text-bulk.ts} +285 -200
  230. package/write-text/context-text3.ts +252 -0
  231. package/write-text/{context-text4.js → context-text4.ts} +231 -146
  232. package/write-text/context-textDELETE.js +125 -94
  233. package/write-text/objectarraylabels/{index.js → index.ts} +2 -2
  234. package/write-text/objectarraylabels/objectarraylabels.d.ts +72 -0
  235. package/write-text/objectarraylabels/objectarraylabels.js +247 -200
  236. package/Math/matrix4.js +0 -1
  237. package/Math/tessellation/earcut/adapters.js +0 -37
  238. package/Math/tessellation/hybrid-triangle-tessellation-meta.js +0 -123
  239. package/Math/tessellation/methods.js +0 -46
  240. package/Math/tessellation/shred-input.js +0 -18
  241. package/Math/tessellation/tile-merger.js +0 -298
  242. package/Math/tessellation/tiler.js +0 -50
  243. package/Math/tessellation/triangle-tessellation-meta.js +0 -523
  244. package/Math/tessellation/triangle-tessellation.js +0 -14
  245. package/Math/tessellation/types.js +0 -1
  246. package/Math/tessellation/zoom-catch.js +0 -1
  247. package/Math/types.js +0 -1
  248. package/investigation-tools/draw/tiles/adapters.js +0 -67
  249. package/programs/line-on-globe/linestrip/data.js +0 -4
  250. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +0 -328
  251. package/programs/polygon-on-globe/texture-dem-triangles.js +0 -268
  252. package/programs/vectorfields/logics/drawrectangleparticles.js +0 -114
  253. package/programs/vectorfields/logics/drawrectangleparticles1.js +0 -112
  254. package/programs/vectorfields/logics/ubo-new.js +0 -25
  255. package/range-tools-on-terrain/bearing-line/types.js +0 -1
  256. package/range-tools-on-terrain/circle-line-chain/types.js +0 -1
  257. package/range-tools-on-terrain/range-ring/rangeringangletext.js +0 -331
  258. package/range-tools-on-terrain/range-ring/types.js +0 -9
  259. package/semiplugins/interface.js +0 -1
  260. package/semiplugins/shape-on-terrain/terrain-cover/texture-dem-cover.js +0 -1
  261. package/semiplugins/shell/bbox-renderer/index.js +0 -2
  262. package/semiplugins/shell/bbox-renderer/object.js +0 -65
  263. package/semiplugins/type.js +0 -1
  264. package/types.js +0 -19
  265. package/util/account/create-buffermap-orchastration.js +0 -39
  266. package/util/account/single-attribute-buffer-management/types.js +0 -1
  267. package/util/check/typecheck.js +0 -66
  268. package/util/gl-util/uniform-block/types.js +0 -1
  269. package/util/picking/picker-displayer.js +0 -134
  270. package/util/webglobe/index.js +0 -2
  271. package/vectorfield/waveparticles/plugin.js +0 -290
  272. package/write-text/context-text3.js +0 -167
@@ -1,328 +0,0 @@
1
- import { TextureDemTriangles } from "./texture-dem-triangles";
2
- import { RADIAN, radianToMercatorXY } from "../../Math/methods";
3
- import { mergeMeshes } from "../../Math/tessellation/tile-merger";
4
- import { createTriangleTessellationMeta, getAllPoints, partialTessellation } from "../../Math/tessellation/triangle-tessellation-meta";
5
- /**
6
- * Loads a plugin with test data for TextureDemTriangles
7
- */
8
- function test1(zoomLevel, p1, p2, p3) {
9
- const triangleMeta = createTriangleTessellationMeta(p1, p2, p3);
10
- const { vec3s, longLats, indices } = getAllPoints(triangleMeta, zoomLevel);
11
- return { vec3s, longLats, indices };
12
- }
13
- function partialTest(bboxZooms, p1, p2, p3) {
14
- const triangleMeta = createTriangleTessellationMeta(p1, p2, p3);
15
- return partialTessellation(triangleMeta, bboxZooms, 5);
16
- }
17
- function antalyaTestTriangle() {
18
- const p1 = [30.5391 * RADIAN, 36.9083 * RADIAN];
19
- const p2 = [32.9271 * RADIAN, 36.9083 * RADIAN];
20
- const p3 = [31.7331 * RADIAN, 35.8145 * RADIAN];
21
- const bboxZooms = [
22
- // 12 zoom level
23
- {
24
- bbox: {
25
- min: [30.5391 * RADIAN, 35.8145 * RADIAN],
26
- max: [32.9271 * RADIAN, 36.9083 * RADIAN]
27
- }, zoom: 15
28
- },
29
- // 11 zoom level
30
- // {
31
- // bbox: {
32
- // min: [30.5391 * RADIAN, 35.8145 * RADIAN],
33
- // max: [32.9271 * RADIAN, 36.9083 * RADIAN]
34
- // }, zoom: 11
35
- // },
36
- ];
37
- return partialTest(bboxZooms, p1, p2, p3);
38
- }
39
- function loadVec3sLongLatsIndices(gl, bufferInfo, data) {
40
- // Calculate total sizes
41
- let totalVec3s = 0;
42
- let totalLongLats = 0;
43
- let totalIndices = 0;
44
- for (const item of data) {
45
- totalVec3s += item.vec3s.length;
46
- totalLongLats += item.longLats.length;
47
- totalIndices += item.indices.length;
48
- }
49
- // Pre-allocate arrays
50
- const vec3s = new Float32Array(totalVec3s);
51
- const longLats = new Float32Array(totalLongLats);
52
- const indices = new Uint32Array(totalIndices);
53
- let vec3Offset = 0;
54
- let longLatOffset = 0;
55
- let indexOffset = 0;
56
- let vertexOffset = 0;
57
- for (const item of data) {
58
- // Copy vec3s
59
- vec3s.set(item.vec3s, vec3Offset);
60
- vec3Offset += item.vec3s.length;
61
- // Copy longLats
62
- longLats.set(item.longLats, longLatOffset);
63
- longLatOffset += item.longLats.length;
64
- // Copy and adjust indices
65
- for (let i = 0; i < item.indices.length; i++) {
66
- indices[indexOffset + i] = item.indices[i] + vertexOffset;
67
- }
68
- indexOffset += item.indices.length;
69
- vertexOffset += item.vec3s.length / 3; // Each vertex has 3 components
70
- }
71
- gl.bindBuffer(gl.ARRAY_BUFFER, bufferInfo.pos3dBufferInfo.buffer);
72
- gl.bufferData(gl.ARRAY_BUFFER, vec3s, gl.STATIC_DRAW);
73
- gl.bindBuffer(gl.ARRAY_BUFFER, bufferInfo.longLatBufferInfo.buffer);
74
- gl.bufferData(gl.ARRAY_BUFFER, longLats, gl.STATIC_DRAW);
75
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, bufferInfo.elementBufferInfo.buffer);
76
- gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);
77
- }
78
- const createTestBBOXES = () => {
79
- const bboxes = [];
80
- for (let i = 0; i < 6; i++) {
81
- const north = Math.random() * Math.PI / 2 / 1.4; // random latitude
82
- const west = Math.random() * -1 * Math.PI / 10; // random longitude
83
- const south = north - Math.PI / 30; // random latitude
84
- const east = west + Math.PI / 30; // random longitude
85
- const ll = [west, north]; // random northWest
86
- const ur = [east, south]; // random southEast
87
- //
88
- bboxes.push({ ll, ur });
89
- }
90
- return bboxes;
91
- };
92
- const demTextureBBOX = createTestBBOXES();
93
- function showTextureBBoxes(bboxes, demData = []) {
94
- for (let i = 0; i < bboxes.length; i++) {
95
- const bbox = bboxes[i];
96
- console.log(`Texture BBOX ${i}: LL(${(bbox.ll[0] * 180 / Math.PI).toFixed(2)}, ${(bbox.ll[1] * 180 / Math.PI).toFixed(2)}) UR(${(bbox.ur[0] * 180 / Math.PI).toFixed(2)}, ${(bbox.ur[1] * 180 / Math.PI).toFixed(2)})`);
97
- if (demData.length > i) {
98
- const dem = demData[i];
99
- let demStr = "DEM: \n";
100
- for (let j = 0; j < dem.length; j++) {
101
- demStr += dem[j].toFixed(1) + " ";
102
- if ((j + 1) % 5 === 0) {
103
- demStr += "\n";
104
- }
105
- }
106
- console.log(demStr);
107
- }
108
- }
109
- }
110
- const createTestDemTextures = () => {
111
- const textures = [];
112
- for (let i = 0; i < 6; i++) {
113
- const texture = [];
114
- for (let j = 0; j < 5 * 5; j++) {
115
- const value = 100 * Math.random(); // random elevation value
116
- texture.push(value);
117
- }
118
- textures.push(texture);
119
- }
120
- return textures;
121
- };
122
- // TODO: NAME IT longlat degree or radian
123
- export function createBuffersAndFill(gl, vec3s, longLats, indices) {
124
- const positionBuffer = gl.createBuffer();
125
- const longLatBuffer = gl.createBuffer();
126
- const indexBuffer = gl.createBuffer();
127
- gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
128
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vec3s), gl.STATIC_DRAW);
129
- gl.bindBuffer(gl.ARRAY_BUFFER, longLatBuffer);
130
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(longLats), gl.STATIC_DRAW);
131
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
132
- gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
133
- return {
134
- buffers: {
135
- positionBuffer,
136
- longLatBuffer,
137
- indexBuffer
138
- }
139
- };
140
- }
141
- export class TextureDemTrianglesTestPlugin {
142
- globe = null;
143
- textureDemTriangles = null;
144
- vao = null;
145
- drawOptions = null;
146
- _lastTilesUniqueIdentifier = "";
147
- bufferInfo = null;
148
- id;
149
- uboTriangleStyle = null;
150
- uboStringStyle = null;
151
- showDemPoints = false;
152
- bboxZooms = [];
153
- constructor(id) {
154
- this.id = id;
155
- this.bboxZooms = [];
156
- }
157
- init(globe) {
158
- this.globe = globe;
159
- this.textureDemTriangles = new TextureDemTriangles(globe);
160
- // set bboxes and dem textures
161
- const demTextures = createTestDemTextures();
162
- // const demTextureBBOX = createTestBBOXES();
163
- this.textureDemTriangles.setDemTextures(demTextures, demTextureBBOX);
164
- //
165
- // const baseZoom = 5;
166
- showTextureBBoxes(demTextureBBOX, demTextures);
167
- this.uboTriangleStyle = this.textureDemTriangles.createUBO();
168
- this.uboStringStyle = this.textureDemTriangles.createUBO();
169
- this.uboTriangleStyle.updateSingle("u_color", new Float32Array([1.0, 0.0, 0.0, 0.0]));
170
- this.uboStringStyle.updateSingle("u_color", new Float32Array([.3, .3, .0, 1.0]));
171
- const elementBuffer = globe.gl.createBuffer();
172
- const bufferInfo = {
173
- pos3dBufferInfo: {
174
- buffer: globe.gl.createBuffer(),
175
- stride: 0,
176
- offset: 0,
177
- },
178
- longLatBufferInfo: {
179
- buffer: globe.gl.createBuffer(),
180
- stride: 0,
181
- offset: 0,
182
- },
183
- elementBufferInfo: {
184
- buffer: elementBuffer,
185
- stride: 0,
186
- offset: 0,
187
- },
188
- drawOptions: {
189
- drawRange: { count: 0, first: 0 },
190
- drawMode: globe.gl.TRIANGLES,
191
- elementBuffer: elementBuffer,
192
- elementBufferIndexType: globe.gl.UNSIGNED_INT
193
- },
194
- drawOptionsPoint: {
195
- drawRange: { count: 0, first: 0 },
196
- drawMode: globe.gl.POINTS,
197
- },
198
- };
199
- this.vao = this.textureDemTriangles.createVAO(bufferInfo.pos3dBufferInfo, bufferInfo.longLatBufferInfo);
200
- this.bufferInfo = bufferInfo;
201
- this.setZoom(5);
202
- }
203
- setUniform(key, value) {
204
- if (this.uboTriangleStyle) {
205
- this.uboTriangleStyle.updateSingle(key, value);
206
- }
207
- if (this.uboStringStyle) {
208
- this.uboStringStyle.updateSingle(key, value);
209
- }
210
- this.globe?.DrawRender();
211
- }
212
- setZoom(zoomLevel) {
213
- this.bboxZooms = demTextureBBOX.map((bbox, index) => {
214
- return {
215
- bbox: {
216
- min: bbox.ll,
217
- max: bbox.ur,
218
- }, zoom: index + zoomLevel + 1
219
- };
220
- });
221
- // all world - FIX: Convert to radians
222
- this.bboxZooms.push({
223
- bbox: {
224
- min: [-180 * RADIAN, -90 * RADIAN], // ✓ Now radians
225
- max: [180 * RADIAN, 90 * RADIAN] // ✓ Now radians
226
- },
227
- zoom: zoomLevel
228
- });
229
- if (!this.globe || !this.textureDemTriangles || !this.bufferInfo)
230
- return;
231
- // const p1: LongLatRadian = [-20 * Math.PI / 180, 50 * Math.PI / 180];
232
- // const p2: LongLatRadian = [20 * Math.PI / 180, 50 * Math.PI / 180];
233
- // const p3: LongLatRadian = [0, -10 * Math.PI / 180];
234
- const p1 = [-60 * Math.PI / 180, 60 * Math.PI / 180];
235
- const p2 = [60 * Math.PI / 180, 60 * Math.PI / 180];
236
- const p3 = [0, -60 * Math.PI / 180];
237
- const bigTriangle = partialTest(this.bboxZooms, p1, p2, p3);
238
- const bufferInfo = this.bufferInfo;
239
- const antalya = antalyaTestTriangle();
240
- loadVec3sLongLatsIndices(this.globe.gl, bufferInfo, [
241
- bigTriangle,
242
- antalya
243
- ]);
244
- bufferInfo.drawOptions.drawRange.first = 0;
245
- bufferInfo.drawOptions.drawRange.count = antalya.indices.length + bigTriangle.indices.length;
246
- bufferInfo.drawOptionsPoint.drawRange.first = 0;
247
- bufferInfo.drawOptionsPoint.drawRange.count = (antalya.longLats.length + bigTriangle.longLats.length) / 2;
248
- }
249
- setShowDemPoints(show) {
250
- this.showDemPoints = show;
251
- }
252
- draw3D() {
253
- if (!this.globe || !this.textureDemTriangles || !this.vao || !this.bufferInfo)
254
- return;
255
- const gl = this.globe.gl;
256
- this._prepareDem();
257
- gl.frontFace(gl.CW);
258
- // @ts-ignore
259
- this.textureDemTriangles.draw(this.vao, this.bufferInfo.drawOptions, this.uboTriangleStyle);
260
- if (this.showDemPoints) {
261
- // @ts-ignore
262
- this.textureDemTriangles.draw(this.vao, this.bufferInfo.drawOptionsPoint, this.uboStringStyle);
263
- }
264
- gl.frontFace(gl.CCW);
265
- }
266
- _prepareDem() {
267
- if (!this.globe || !this.textureDemTriangles)
268
- return;
269
- const drawnTiles = this.globe.api_GetDrawedTilesInfo();
270
- if (this._checkTileChange(drawnTiles))
271
- return;
272
- const mergedTiles = mergeMeshes(drawnTiles, 12, 5, 4);
273
- // let I = 6;
274
- for (const tile of mergedTiles) {
275
- const bbox = globeBBoxToXYBBOX(tile.bbox);
276
- // Validation: Check if values are in expected radian range
277
- // if (Math.abs(bbox.northWest[0]) > Math.PI * 2 || Math.abs(bbox.northWest[1]) > Math.PI) {
278
- // console.error(`⚠️ BBOX out of radian range! Raw bbox:`, tile.bbox);
279
- // }
280
- if (bbox.ll[0] > bbox.ur[0]) {
281
- console.warn(`⚠️ BBOX longitudes seem incorrect! ll longitude is greater than ur longitude. Raw bbox:`, bbox);
282
- }
283
- if (bbox.ll[1] > bbox.ur[1]) {
284
- console.warn(`⚠️ BBOX latitudes seem incorrect! ll latitude is greater than ur latitude. Raw bbox:`, bbox);
285
- }
286
- // console.log(` BBox LL (${(bbox.ll[0]).toFixed(2)}°, ${(bbox.ll[1]).toFixed(2)}°) UR (${(bbox.ur[0]).toFixed(2)}°, ${(bbox.ur[1]).toFixed(2)}°), Cover: ${tile.coverRatio.x.toFixed(2)}x${tile.coverRatio.y.toFixed(2)}`);
287
- // console.log(`${I} Cover: ${tile.coverRatio.x.toFixed(2)} ${tile.coverRatio.y.toFixed(2)}`);
288
- // I--;
289
- }
290
- // console.log("...............................")
291
- this.textureDemTriangles.setDemTextures(mergedTiles.map(t => Array.from(t.mesh)), mergedTiles.map(t => globeBBoxToXYBBOX(t.bbox)), mergedTiles.map(t => ({ x: t.coverRatio.x, y: t.coverRatio.y })));
292
- }
293
- _checkTileChange(drawnTiles) {
294
- let maxLevel = 0;
295
- let minLevel = Number.MAX_VALUE;
296
- const tileMap = new Map();
297
- for (const tile of drawnTiles) {
298
- if (tile.level > maxLevel) {
299
- maxLevel = tile.level;
300
- }
301
- if (tile.level < minLevel) {
302
- minLevel = tile.level;
303
- }
304
- if (!tileMap.has(tile.level)) {
305
- tileMap.set(tile.level, []);
306
- }
307
- tileMap.get(tile.level).push(tile);
308
- }
309
- let tilesUniqueId = "";
310
- for (let level = minLevel; level <= maxLevel; level++) {
311
- const tiles = tileMap.get(level);
312
- if (!tiles)
313
- continue;
314
- tilesUniqueId += `L${level}_C${tiles.length}_`;
315
- }
316
- if (tilesUniqueId === this._lastTilesUniqueIdentifier)
317
- return true;
318
- this._lastTilesUniqueIdentifier = tilesUniqueId;
319
- return false;
320
- }
321
- }
322
- function globeBBoxToXYBBOX(t) {
323
- // this code scales Y to linear integration
324
- return {
325
- ll: radianToMercatorXY([t.ll.x * RADIAN, t.ll.y * RADIAN]), // west longitude, north latitude
326
- ur: radianToMercatorXY([t.ur.x * RADIAN, t.ur.y * RADIAN]) // east longitude, south latitude
327
- };
328
- }
@@ -1,268 +0,0 @@
1
- import { createProgram } from "../../util/webglobjectbuilders";
2
- import { CameraUniformBlockTotemCache, CameraUniformBlockString } from "../totems/camerauniformblock";
3
- import { cartesian3DToGLPosition, } from "../../util/shaderfunctions/geometrytransformations";
4
- import { isPointInBBox } from "../../util/shaderfunctions/geometrytransformations";
5
- import { drawArrays } from "../../util/gl-util/draw-options/methods";
6
- import { attributeLoader } from "../../util/gl-util/buffer/attribute-loader";
7
- import { WORLD_RADIUS_3D } from "../../Math/constants";
8
- import { UniformBlockManager } from "../../util/gl-util/uniform-block/manager";
9
- const uniformBindingPoints = {
10
- camera: 0,
11
- style: 1,
12
- };
13
- const styleBlockManager = new UniformBlockManager('Style', [
14
- { name: "u_color", type: "vec4", value: new Float32Array([0.0, 0.0, 0.0, 0.0]) },
15
- { name: "u_pointSize", type: "float", value: new Float32Array([1.0]) },
16
- { name: "u_opacity", type: "float", value: new Float32Array([1.0]) },
17
- ], uniformBindingPoints.style);
18
- const vertexShaderSource = `#version 300 es
19
- #pragma vscode_glsllint_stage : vert
20
-
21
- precision highp float;
22
- precision highp sampler2DArray;
23
-
24
- ${CameraUniformBlockString}
25
-
26
- ${cartesian3DToGLPosition}
27
- in vec3 a_position;
28
- in vec2 a_xy;
29
- uniform sampler2DArray u_demTexture; // <-- changed from array to single
30
- uniform vec4 u_demTextureBBOX[6];
31
- uniform vec2 u_textureDataCoverRatio[6];
32
- uniform int u_breakLoopIndex;
33
-
34
- ${styleBlockManager.glslCode()}
35
- // Todo: light direction.
36
- out vec4 v_color;
37
-
38
-
39
- ${isPointInBBox}
40
-
41
- void main() {
42
-
43
- float elevation = ${WORLD_RADIUS_3D}; // default elevation at sea level
44
- float altitude = 0.0;
45
- v_color = vec4(1.0, 1.0, 1.0, 1.0); // default color white
46
-
47
- for (int i = 0; i < 6; i++) {
48
- if (isPointInBBox(a_xy, u_demTextureBBOX[i])) {
49
- vec2 uv = (a_xy - u_demTextureBBOX[i].xy) / (u_demTextureBBOX[i].zw - u_demTextureBBOX[i].xy);
50
- // uv.y = 1.0 - uv.y; // flip y coordinate
51
- // rescale and transform uv to fit in the texture data cover bbox
52
- uv *= u_textureDataCoverRatio[i];
53
- altitude = texture(u_demTexture, vec3(uv, float(i))).r;
54
- if (altitude != 0.0) {
55
- break;
56
- }
57
- }
58
- }
59
- if (u_color.a > 0.0) {
60
- v_color = u_color;
61
- } else {
62
- if ( altitude > 0.00001 ) {
63
- v_color = mix(vec4(1.0, 1.0, 1.0, 1.0), vec4(1.0, 0.2, 0.2, 1.0), altitude / 2.0); // color from white to red based on altitude
64
- } else {
65
- // white
66
- v_color = vec4(1.0, 1.0, 1.0, 0.5);
67
- }
68
- }
69
- v_color.a *= u_opacity;
70
- vec3 position = a_position * (elevation + altitude * 2.0);
71
- gl_Position = cartesian3DToGLPosition(position);
72
- gl_PointSize = 6.0; //u_pointSize;
73
- }
74
- `;
75
- const fragmentShaderSource = `#version 300 es
76
- #pragma vscode_glsllint_stage : frag
77
-
78
- precision highp float;
79
- in vec4 v_color;
80
- out vec4 outColor;
81
- void main() {
82
- outColor = v_color;
83
- }
84
- `;
85
- function resCalculation(sourceResolution, mergeCount) {
86
- return sourceResolution + (mergeCount - 1) * (sourceResolution - 1);
87
- }
88
- const RESOLUTION = resCalculation(5, 12); // 5 is tile dimension length, 12 is merge count
89
- export class TextureDemTriangles {
90
- globe;
91
- gl;
92
- program;
93
- // Later an injection will handle demTextures and demTextureBBOX
94
- texture;
95
- // demTextures: WebGLTexture[] = [];
96
- // demTextureBBOX: Float32Array = new Float32Array(6 * 4); // 6 bounding boxes
97
- cameraUniformBlock;
98
- _publishedUBOs = [];
99
- locations = {
100
- attributes: {
101
- a_position: -1,
102
- a_xy: -1,
103
- },
104
- uniforms: {
105
- u_demTexture: -1,
106
- u_demTextureBBOX: -1,
107
- u_textureDataCoverRatio: -1,
108
- u_style: -1,
109
- u_breakLoopIndex: -1,
110
- }
111
- };
112
- constructor(globe) {
113
- this.globe = globe;
114
- this.gl = globe.gl;
115
- this.program = createProgram(this.gl, vertexShaderSource, fragmentShaderSource);
116
- this.cameraUniformBlock = CameraUniformBlockTotemCache.get(this.globe);
117
- this.cameraUniformBlock.assignBindingPoint(this.program, uniformBindingPoints.camera);
118
- // get attribute locations
119
- this.locations.attributes.a_position = this.gl.getAttribLocation(this.program, 'a_position');
120
- this.locations.attributes.a_xy = this.gl.getAttribLocation(this.program, 'a_xy');
121
- // get uniform locations
122
- this.locations.uniforms.u_demTexture = this.gl.getUniformLocation(this.program, 'u_demTexture');
123
- this.locations.uniforms.u_demTextureBBOX = this.gl.getUniformLocation(this.program, 'u_demTextureBBOX');
124
- this.locations.uniforms.u_textureDataCoverRatio = this.gl.getUniformLocation(this.program, 'u_textureDataCoverRatio');
125
- this.locations.uniforms.u_breakLoopIndex = this.gl.getUniformLocation(this.program, 'u_breakLoopIndex');
126
- this.locations.uniforms.u_style = this.gl.getUniformBlockIndex(this.program, 'Style');
127
- this.gl.uniformBlockBinding(this.program, this.locations.uniforms.u_style, uniformBindingPoints.style);
128
- // create 3d texture
129
- const texture = this.gl.createTexture();
130
- this.gl.bindTexture(this.gl.TEXTURE_2D_ARRAY, texture);
131
- // Calculate correct size: tileDimensionLength + (mergeCount - 1) * (tileDimensionLength - 1)
132
- // For tileDimensionLength=5, mergeCount=8: 5 + 7*4 = RESOLUTION
133
- this.gl.texStorage3D(this.gl.TEXTURE_2D_ARRAY, 1, this.gl.R32F, RESOLUTION, RESOLUTION, 6);
134
- // set texture parameters
135
- const ext = this.gl.getExtension('OES_texture_float_linear');
136
- console.log('OES_texture_float_linear extension:', ext);
137
- this.gl.texParameteri(this.gl.TEXTURE_2D_ARRAY, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR);
138
- this.gl.texParameteri(this.gl.TEXTURE_2D_ARRAY, this.gl.TEXTURE_MAG_FILTER, this.gl.LINEAR);
139
- this.gl.texParameteri(this.gl.TEXTURE_2D_ARRAY, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);
140
- this.gl.texParameteri(this.gl.TEXTURE_2D_ARRAY, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);
141
- this.gl.bindTexture(this.gl.TEXTURE_2D_ARRAY, null);
142
- this.texture = texture;
143
- }
144
- createVAO(pos3dBufferInfo, longLatBufferInfo) {
145
- const vao = this.gl.createVertexArray();
146
- this.gl.bindVertexArray(vao);
147
- attributeLoader(this.gl, pos3dBufferInfo, this.locations.attributes.a_position, 3);
148
- attributeLoader(this.gl, longLatBufferInfo, this.locations.attributes.a_xy, 2);
149
- this.gl.bindVertexArray(null);
150
- return vao;
151
- }
152
- setDemTextures(demTexturesData, demTextureBBOX, coverRatio) {
153
- // Add validation for maximum layers
154
- const maxLayers = this.gl.getParameter(this.gl.MAX_ARRAY_TEXTURE_LAYERS);
155
- if (demTexturesData.length > Math.min(maxLayers, 6)) {
156
- console.error(`Too many DEM textures: ${demTexturesData.length}, max supported: ${Math.min(maxLayers, 6)}`);
157
- return;
158
- }
159
- // bind textures to texture units
160
- const gl = this.gl;
161
- gl.bindTexture(gl.TEXTURE_2D_ARRAY, this.texture);
162
- gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
163
- // turn off premultiply alpha
164
- gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
165
- // bind and upload each texture to the 3D texture array
166
- for (let i = 0; i < demTexturesData.length; i++) {
167
- const data = demTexturesData[i];
168
- if (data.length === RESOLUTION * RESOLUTION) { // <-- FIXED
169
- gl.texSubImage3D(gl.TEXTURE_2D_ARRAY, 0, 0, 0, i, RESOLUTION, RESOLUTION, 1, gl.RED, gl.FLOAT, new Float32Array(data));
170
- }
171
- else {
172
- console.warn(`DEM texture ${i} has incorrect size: ${data.length}, expected: ${RESOLUTION * RESOLUTION}`);
173
- }
174
- }
175
- // set uniform for texture units
176
- const bboxVec4Array = new Float32Array(6 * 4);
177
- for (let i = 0; i < demTextureBBOX.length; i++) {
178
- const bbox = demTextureBBOX[i];
179
- bboxVec4Array[i * 4 + 0] = bbox.ll[0];
180
- bboxVec4Array[i * 4 + 1] = bbox.ll[1];
181
- bboxVec4Array[i * 4 + 2] = bbox.ur[0];
182
- bboxVec4Array[i * 4 + 3] = bbox.ur[1];
183
- }
184
- const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
185
- gl.useProgram(this.program);
186
- gl.uniform4fv(this.locations.uniforms.u_demTextureBBOX, bboxVec4Array);
187
- if (coverRatio) {
188
- gl.uniform2fv(this.locations.uniforms.u_textureDataCoverRatio, new Float32Array(coverRatio.flatMap(ratio => [ratio.x, ratio.y])));
189
- }
190
- else {
191
- gl.uniform2fv(this.locations.uniforms.u_textureDataCoverRatio, new Float32Array(12).fill(1.0));
192
- }
193
- gl.bindTexture(gl.TEXTURE_2D_ARRAY, null);
194
- gl.uniform1i(this.locations.uniforms.u_breakLoopIndex, demTexturesData.length);
195
- gl.useProgram(currentProgram);
196
- }
197
- createUBO(bufferReadType = "STATIC_DRAW") {
198
- const ubo = styleBlockManager.createUBO(this.gl, bufferReadType);
199
- this._publishedUBOs.push(ubo);
200
- return ubo;
201
- }
202
- free() {
203
- this.gl.deleteProgram(this.program);
204
- this.gl.deleteTexture(this.texture);
205
- this._publishedUBOs.forEach(ubo => ubo.free());
206
- this._publishedUBOs = [];
207
- CameraUniformBlockTotemCache.release(this.globe);
208
- }
209
- draw(vao, drawOptions, ubo) {
210
- const gl = this.gl;
211
- gl.useProgram(this.program);
212
- this.cameraUniformBlock.bind(uniformBindingPoints.camera);
213
- // TURN OFF flip y for texture
214
- // gl.disable(gl.DEPTH_TEST);
215
- // gl.depthMask(false);
216
- // gl.depthRange(0.0, 0.01); // Use near 1% of depth range
217
- // Step 3: Optionally: Set depth func to ALWAYS (to ignore previous depth)
218
- // This ensures your new geometry passes depth test regardless of prior depth values
219
- gl.activeTexture(gl.TEXTURE0);
220
- gl.bindTexture(gl.TEXTURE_2D_ARRAY, this.texture);
221
- gl.uniform1i(this.locations.uniforms.u_demTexture, 0); // texture unit 0
222
- // bind VAO and draw
223
- gl.bindVertexArray(vao);
224
- // bind UBO for style
225
- ubo.bind();
226
- drawOnTopBegin(gl);
227
- drawArrays(gl, gl.POINTS, drawOptions);
228
- drawOnTopEnd(gl);
229
- gl.bindVertexArray(null);
230
- gl.bindTexture(gl.TEXTURE_2D_ARRAY, null);
231
- gl.useProgram(null);
232
- ubo.unbind();
233
- this.cameraUniformBlock.unbind(uniformBindingPoints.camera);
234
- }
235
- _getUniformBlockOffset(name) {
236
- // hardcoded offsets based on std140 layout rules
237
- const offsets = {
238
- 'u_color': 0,
239
- };
240
- const result = offsets[name];
241
- if (result === undefined) {
242
- throw new Error(`Unknown uniform block member: ${name}, names are: ${Object.keys(offsets).join(", ")}`);
243
- }
244
- return result;
245
- }
246
- }
247
- function drawOnTopBegin(gl) {
248
- gl.disable(gl.DEPTH_TEST);
249
- // gl.enable(gl.POLYGON_OFFSET_FILL);
250
- // // Use an offset to "nudge" the depth value slightly closer or farther.
251
- // // Common values are gl.polygonOffset(1.0, 1.0) or gl.polygonOffset(0.RESOLUTION, 0.RESOLUTION)
252
- // gl.polygonOffset(1.0, 1.0);
253
- // gl.depthRange(0.0, 0.0001); // Use near 0.01% of depth range
254
- // gl.enable(gl.POLYGON_OFFSET_FILL);
255
- // You will need to experiment with these values!
256
- // A good starting point is -1.0, -1.0.
257
- // Negative values "pull" the fragments closer to the camera.
258
- // gl.polygonOffset(-1.0, -1.0);
259
- // gl.enable(gl.POLYGON_OFFSET_FILL);
260
- // gl.polygonOffset(-1.0, -2.0);
261
- }
262
- function drawOnTopEnd(gl) {
263
- gl.enable(gl.DEPTH_TEST);
264
- // gl.disable(gl.POLYGON_OFFSET_FILL);
265
- // gl.disable(gl.POLYGON_OFFSET_FILL);
266
- // gl.depthRange(0.0, 1.0); // Restore full depth range
267
- // gl.disable(gl.POLYGON_OFFSET_FILL);
268
- }