@pirireis/webglobeplugins 0.9.6 → 0.9.8

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 (304) hide show
  1. package/{Math → dist/Math}/angle-calculation.js +15 -14
  2. package/dist/Math/arc.js +65 -0
  3. package/{Math → dist/Math}/bounds/line-bbox.js +188 -225
  4. package/dist/Math/constants.js +9 -0
  5. package/{Math/frustum/camera.ts → dist/Math/frustum/camera.js} +24 -32
  6. package/{Math/frustum/from-globeinfo.ts → dist/Math/frustum/from-globeinfo.js} +48 -63
  7. package/dist/Math/frustum/types.js +2 -0
  8. package/{Math/globe-util/horizon-plane.ts → dist/Math/globe-util/horizon-plane.js} +112 -137
  9. package/dist/Math/index.js +1 -0
  10. package/dist/Math/juction/arc-plane.js +83 -0
  11. package/dist/Math/juction/line-sphere.js +25 -0
  12. package/{Math/juction/plane-plane.ts → dist/Math/juction/plane-plane.js} +58 -66
  13. package/dist/Math/line.js +56 -0
  14. package/dist/Math/matrix4.js +1 -0
  15. package/{Math → dist/Math}/methods.js +201 -237
  16. package/dist/Math/plane.js +60 -0
  17. package/{Math/quaternion.ts → dist/Math/quaternion.js} +104 -120
  18. package/dist/Math/types.js +2 -0
  19. package/dist/Math/utils.js +4 -0
  20. package/{Math/vec3.ts → dist/Math/vec3.js} +126 -155
  21. package/dist/algorithms/search-binary.js +19 -0
  22. package/dist/altitude-locator/adaptors.js +1 -0
  23. package/{altitude-locator → dist/altitude-locator}/draw-subset-obj.js +18 -27
  24. package/dist/altitude-locator/keymethod.js +1 -0
  25. package/{altitude-locator → dist/altitude-locator}/plugin.js +341 -439
  26. package/{altitude-locator → dist/altitude-locator}/types.js +23 -26
  27. package/{arrowfield → dist/arrowfield}/adaptor.js +14 -11
  28. package/dist/arrowfield/index.js +10 -0
  29. package/{arrowfield → dist/arrowfield}/plugin.js +86 -128
  30. package/dist/bearing-line/index.js +8 -0
  31. package/{bearing-line → dist/bearing-line}/plugin.js +449 -512
  32. package/{circle-line-chain → dist/circle-line-chain}/chain-list-map.js +205 -221
  33. package/dist/circle-line-chain/init.js +1 -0
  34. package/{circle-line-chain → dist/circle-line-chain}/plugin.js +424 -469
  35. package/dist/circle-line-chain/util.js +5 -0
  36. package/{compass-rose → dist/compass-rose}/compass-rose-padding-flat.js +225 -266
  37. package/{compass-rose → dist/compass-rose}/compass-text-writer.js +153 -173
  38. package/dist/compass-rose/index.js +7 -0
  39. package/{compassrose → dist/compassrose}/compassrose.js +296 -341
  40. package/dist/compassrose/index.js +8 -0
  41. package/dist/globe-types.js +1 -0
  42. package/dist/heatwave/index.js +10 -0
  43. package/{heatwave → dist/heatwave}/isobar/objectarraylabels.js +202 -247
  44. package/{heatwave → dist/heatwave}/isobar/plugin.js +343 -340
  45. package/{heatwave → dist/heatwave}/isobar/quadtreecontours.js +300 -336
  46. package/{heatwave → dist/heatwave}/plugins/heatwaveglobeshell.js +206 -258
  47. package/dist/index.js +58 -0
  48. package/{jest.config.js → dist/jest.config.js} +7 -6
  49. package/{partialrings → dist/partialrings}/buffer-manager.js +81 -89
  50. package/dist/partialrings/index.js +41 -0
  51. package/{partialrings → dist/partialrings}/plugin.js +135 -160
  52. package/{partialrings → dist/partialrings}/program.js +204 -242
  53. package/{pin → dist/pin}/pin-object-array.js +305 -381
  54. package/{pin → dist/pin}/pin-point-totem.js +60 -77
  55. package/{point-heat-map → dist/point-heat-map}/adaptors/timetracksplugin-format-to-this.js +66 -78
  56. package/dist/point-heat-map/index.js +1 -0
  57. package/{point-heat-map → dist/point-heat-map}/plugin-webworker.js +126 -151
  58. package/{point-heat-map → dist/point-heat-map}/point-to-heat-map-flow.js +127 -150
  59. package/dist/point-tracks/key-methods.js +5 -0
  60. package/{point-tracks → dist/point-tracks}/plugin.js +338 -394
  61. package/dist/programs/arrowfield/index.js +7 -0
  62. package/{programs → dist/programs}/arrowfield/logic.js +144 -173
  63. package/{programs → dist/programs}/arrowfield/object.js +66 -89
  64. package/{programs → dist/programs}/data2legend/density-to-legend.js +76 -90
  65. package/{programs → dist/programs}/data2legend/point-to-density-texture.js +76 -90
  66. package/dist/programs/float2legendwithratio/index.js +8 -0
  67. package/{programs → dist/programs}/float2legendwithratio/logic.js +122 -145
  68. package/{programs → dist/programs}/float2legendwithratio/object.js +110 -141
  69. package/{programs → dist/programs}/globe-util/is-globe-moved.js +21 -27
  70. package/dist/programs/globeshell/index.js +8 -0
  71. package/dist/programs/globeshell/noise/noises.js +1 -0
  72. package/dist/programs/globeshell/wiggle/index.js +8 -0
  73. package/{programs → dist/programs}/globeshell/wiggle/logic.js +246 -272
  74. package/{programs → dist/programs}/globeshell/wiggle/object.js +72 -93
  75. package/dist/programs/helpers/blender/index.js +1 -0
  76. package/{programs → dist/programs}/helpers/blender/program.js +61 -73
  77. package/dist/programs/helpers/fadeaway/index.js +7 -0
  78. package/{programs → dist/programs}/helpers/fadeaway/logic.js +49 -53
  79. package/dist/programs/helpers/fadeaway/object.js +20 -0
  80. package/dist/programs/helpers/index.js +8 -0
  81. package/dist/programs/index.js +58 -0
  82. package/dist/programs/interface.js +1 -0
  83. package/{programs → dist/programs}/line-on-globe/angled-line.js +125 -155
  84. package/{programs → dist/programs}/line-on-globe/circle-accurate-3d.js +95 -121
  85. package/{programs → dist/programs}/line-on-globe/circle-accurate-flat.js +158 -204
  86. package/{programs → dist/programs}/line-on-globe/circle-accurate.js +117 -141
  87. package/{programs → dist/programs}/line-on-globe/circle.js +111 -135
  88. package/{programs → dist/programs}/line-on-globe/degree-padding-around-circle-3d.js +111 -140
  89. package/dist/programs/line-on-globe/index.js +1 -0
  90. package/{programs → dist/programs}/line-on-globe/lines-color-instanced-flat.js +91 -106
  91. package/{programs/line-on-globe/linestrip.ts → dist/programs/line-on-globe/linestrip.js} +108 -165
  92. package/{programs → dist/programs}/line-on-globe/naive-accurate-flexible.js +127 -171
  93. package/{programs → dist/programs}/line-on-globe/to-the-surface.js +83 -101
  94. package/dist/programs/line-on-globe/util.js +8 -0
  95. package/{programs → dist/programs}/picking/pickable-renderer.js +107 -135
  96. package/{programs → dist/programs}/point-on-globe/element-globe-surface-glow.js +101 -127
  97. package/{programs → dist/programs}/point-on-globe/element-point-glow.js +88 -119
  98. package/{programs → dist/programs}/point-on-globe/square-pixel-point.js +126 -141
  99. package/{programs/programcache.ts → dist/programs/programcache.js} +131 -131
  100. package/{programs → dist/programs}/rings/distancering/circleflatprogram.js +115 -95
  101. package/{programs → dist/programs}/rings/distancering/circlepaddingfreeangleprogram.js +320 -329
  102. package/{programs → dist/programs}/rings/distancering/circlepaddysharedbuffer.js +357 -420
  103. package/dist/programs/rings/distancering/index.js +14 -0
  104. package/{programs → dist/programs}/rings/distancering/paddyflatprogram.js +120 -94
  105. package/{programs → dist/programs}/rings/distancering/paddyflatprogram2d.js +122 -98
  106. package/{programs → dist/programs}/rings/distancering/paddyflatprogram3d.js +120 -94
  107. package/dist/programs/rings/distancering/shader.js +1 -0
  108. package/dist/programs/rings/index.js +17 -0
  109. package/{programs → dist/programs}/rings/partial-ring/piece-of-pie.js +181 -221
  110. package/{programs → dist/programs}/totems/camerauniformblock.js +147 -184
  111. package/{programs → dist/programs}/totems/canvas-webglobe-info.js +102 -128
  112. package/{programs → dist/programs}/totems/gpu-selection-uniform-block.js +104 -128
  113. package/dist/programs/totems/index.js +40 -0
  114. package/dist/programs/two-d/pixel-circle.js +1 -0
  115. package/{programs → dist/programs}/two-d/pixel-padding-for-compass.js +101 -113
  116. package/{programs → dist/programs}/util.js +17 -20
  117. package/dist/programs/vectorfields/index.js +23 -0
  118. package/{programs → dist/programs}/vectorfields/logics/drawrectangleparticles.js +65 -83
  119. package/dist/programs/vectorfields/logics/index.js +12 -0
  120. package/{programs → dist/programs}/vectorfields/logics/pixelbased.js +84 -103
  121. package/{programs → dist/programs}/vectorfields/logics/ubo.js +55 -56
  122. package/{programs → dist/programs}/vectorfields/pingpongbuffermanager.js +76 -80
  123. package/dist/rangerings/enum.js +5 -0
  124. package/dist/rangerings/index.js +15 -0
  125. package/{rangerings → dist/rangerings}/plugin.js +560 -649
  126. package/{rangerings → dist/rangerings}/rangeringangletext.js +329 -368
  127. package/{rangerings → dist/rangerings}/ring-account.js +117 -129
  128. package/{shaders → dist/shaders}/fragment-toy/firework.js +5 -2
  129. package/{shaders → dist/shaders}/fragment-toy/singularity.js +5 -5
  130. package/{shape-on-terrain/arc/naive/plugin.ts → dist/shape-on-terrain/arc/naive/plugin.js} +252 -304
  131. package/{timetracks → dist/timetracks}/adaptors-line-strip.js +71 -80
  132. package/{timetracks → dist/timetracks}/adaptors.js +122 -133
  133. package/dist/timetracks/index.js +19 -0
  134. package/{timetracks → dist/timetracks}/plugin-line-strip.js +250 -295
  135. package/{timetracks → dist/timetracks}/plugin.js +258 -304
  136. package/{timetracks → dist/timetracks}/program-line-strip.js +416 -493
  137. package/{timetracks → dist/timetracks}/program.js +464 -542
  138. package/{timetracks → dist/timetracks}/programpoint-line-strip.js +101 -122
  139. package/{timetracks → dist/timetracks}/programpoint.js +101 -122
  140. package/{types.ts → dist/types.js} +15 -17
  141. package/{util → dist/util}/account/bufferoffsetmanager.js +179 -209
  142. package/dist/util/account/index.js +23 -0
  143. package/{util/account/single-attribute-buffer-management/buffer-manager.ts → dist/util/account/single-attribute-buffer-management/buffer-manager.js} +108 -119
  144. package/{util/account/single-attribute-buffer-management/buffer-orchestrator.ts → dist/util/account/single-attribute-buffer-management/buffer-orchestrator.js} +150 -173
  145. package/dist/util/account/single-attribute-buffer-management/index.js +9 -0
  146. package/{util/account/single-attribute-buffer-management/object-store.ts → dist/util/account/single-attribute-buffer-management/object-store.js} +51 -65
  147. package/dist/util/account/single-attribute-buffer-management/types.js +2 -0
  148. package/{util → dist/util}/account/util.js +22 -22
  149. package/dist/util/algorithms/index.js +1 -0
  150. package/{util → dist/util}/algorithms/search-binary.js +28 -26
  151. package/dist/util/check/get.js +18 -0
  152. package/dist/util/check/index.js +1 -0
  153. package/dist/util/check/typecheck.js +49 -0
  154. package/{util → dist/util}/geometry/index.js +51 -53
  155. package/{util/gl-util/buffer/attribute-loader.ts → dist/util/gl-util/buffer/attribute-loader.js} +69 -85
  156. package/dist/util/gl-util/buffer/index.js +6 -0
  157. package/dist/util/gl-util/buffer/types.js +1 -0
  158. package/dist/util/gl-util/draw-options/methods.js +38 -0
  159. package/dist/util/gl-util/draw-options/types.js +15 -0
  160. package/{util/gl-util/uniform-block/manager.ts → dist/util/gl-util/uniform-block/manager.js} +156 -187
  161. package/dist/util/gl-util/uniform-block/shader.js +1 -0
  162. package/dist/util/gl-util/uniform-block/types.js +8 -0
  163. package/{util → dist/util}/heatwavedatamanager/datamanager.js +152 -168
  164. package/dist/util/heatwavedatamanager/index.js +10 -0
  165. package/{util → dist/util}/heatwavedatamanager/pointcoordinatesdatacalculator.js +122 -133
  166. package/{util → dist/util}/heatwavedatamanager/pointcoordsmeta.js +20 -22
  167. package/dist/util/index.js +57 -0
  168. package/dist/util/interpolation/index.js +1 -0
  169. package/dist/util/interpolation/timetrack/index.js +5 -0
  170. package/{util → dist/util}/interpolation/timetrack/timetrack-interpolator.js +79 -88
  171. package/{util → dist/util}/interpolation/timetrack/web-worker-str.js +5 -2
  172. package/{util → dist/util}/interpolation/timetrack/web-worker.js +48 -51
  173. package/{util → dist/util}/jshelpers/data-filler.js +20 -19
  174. package/{util → dist/util}/jshelpers/equality.js +20 -17
  175. package/dist/util/jshelpers/index.js +37 -0
  176. package/{util → dist/util}/jshelpers/timefilters.js +32 -32
  177. package/{util → dist/util}/picking/fence.js +46 -46
  178. package/{util → dist/util}/picking/picker-displayer.js +139 -177
  179. package/{util → dist/util}/programs/draw-texture-on-canvas.js +69 -82
  180. package/dist/util/programs/index.js +17 -0
  181. package/{util → dist/util}/programs/shapesonglobe.js +174 -206
  182. package/{util → dist/util}/programs/supersampletotextures.js +103 -132
  183. package/{util → dist/util}/programs/texturetoglobe.js +133 -154
  184. package/{util/shaderfunctions/geometrytransformations.ts → dist/util/shaderfunctions/geometrytransformations.js} +68 -116
  185. package/dist/util/shaderfunctions/index.js +18 -0
  186. package/{util → dist/util}/shaderfunctions/nodata.js +5 -4
  187. package/{util → dist/util}/shaderfunctions/noisefunctions.js +9 -10
  188. package/{util/surface-line-data/arc-bboxes.ts → dist/util/surface-line-data/arc-bboxes.js} +25 -42
  189. package/{util → dist/util}/surface-line-data/arcs-to-cuts.js +50 -74
  190. package/dist/util/surface-line-data/cut-arc.js +1 -0
  191. package/{util/surface-line-data/flow.ts → dist/util/surface-line-data/flow.js} +28 -52
  192. package/dist/util/surface-line-data/rbush-manager.js +1 -0
  193. package/dist/util/surface-line-data/types.js +1 -0
  194. package/dist/util/surface-line-data/web-worker.js +1 -0
  195. package/dist/util/webglobe/gldefaultstates.js +7 -0
  196. package/dist/util/webglobe/index.js +18 -0
  197. package/{util → dist/util}/webglobe/rasteroverlay.js +78 -96
  198. package/{util/webglobjectbuilders.ts → dist/util/webglobjectbuilders.js} +388 -456
  199. package/{util → dist/util}/webglobjectbuilders1.js +237 -271
  200. package/{waveparticles → dist/waveparticles}/adaptor.js +17 -16
  201. package/dist/waveparticles/index.js +10 -0
  202. package/{waveparticles → dist/waveparticles}/plugin.js +266 -313
  203. package/{wind → dist/wind}/imagetovectorfieldandmagnitude.js +35 -39
  204. package/dist/wind/index.js +14 -0
  205. package/{wind → dist/wind}/plugin.js +681 -812
  206. package/{wind → dist/wind}/vectorfieldimage.js +25 -27
  207. package/{write-text → dist/write-text}/attached-text-writer.js +91 -105
  208. package/{write-text → dist/write-text}/context-text.js +98 -125
  209. package/{write-text → dist/write-text}/context-text3.js +155 -178
  210. package/dist/write-text/index.js +5 -0
  211. package/{write-text → dist/write-text}/writer-plugin.js +8 -7
  212. package/package.json +5 -2
  213. package/Math/arc.ts +0 -76
  214. package/Math/constants.ts +0 -11
  215. package/Math/frustum/types.ts +0 -11
  216. package/Math/index.js +0 -0
  217. package/Math/juction/arc-plane.ts +0 -114
  218. package/Math/juction/line-sphere.ts +0 -30
  219. package/Math/line.ts +0 -70
  220. package/Math/matrix4.ts +0 -0
  221. package/Math/plane.ts +0 -86
  222. package/Math/roadmap.md +0 -10
  223. package/Math/types.ts +0 -45
  224. package/Math/utils.js +0 -3
  225. package/algorithms/search-binary.js +0 -14
  226. package/altitude-locator/adaptors.js +0 -0
  227. package/altitude-locator/keymethod.js +0 -0
  228. package/arrowfield/index.js +0 -3
  229. package/bearing-line/index.js +0 -2
  230. package/circle-line-chain/init.js +0 -0
  231. package/circle-line-chain/readme.md +0 -57
  232. package/circle-line-chain/util.js +0 -1
  233. package/compass-rose/index.js +0 -3
  234. package/compassrose/index.js +0 -2
  235. package/depth-locator/readme.md +0 -26
  236. package/globe-types.ts +0 -13
  237. package/heatwave/index.js +0 -4
  238. package/partialrings/goals.md +0 -17
  239. package/partialrings/index.js +0 -3
  240. package/point-heat-map/index.js +0 -0
  241. package/point-heat-map/readme.md +0 -15
  242. package/point-tracks/key-methods.js +0 -3
  243. package/programs/arrowfield/index.js +0 -2
  244. package/programs/float2legendwithratio/index.js +0 -3
  245. package/programs/globeshell/index.js +0 -2
  246. package/programs/globeshell/noise/noises.js +0 -0
  247. package/programs/globeshell/wiggle/index.js +0 -6
  248. package/programs/helpers/blender/index.js +0 -0
  249. package/programs/helpers/fadeaway/index.js +0 -3
  250. package/programs/helpers/fadeaway/object.js +0 -20
  251. package/programs/helpers/index.js +0 -2
  252. package/programs/index.js +0 -21
  253. package/programs/interface.ts +0 -7
  254. package/programs/line-on-globe/index.js +0 -0
  255. package/programs/line-on-globe/util.js +0 -8
  256. package/programs/rings/distancering/index.js +0 -5
  257. package/programs/rings/distancering/shader.js +0 -0
  258. package/programs/rings/index.js +0 -1
  259. package/programs/totems/camerauniformblock.d.ts +0 -48
  260. package/programs/totems/index.ts +0 -2
  261. package/programs/two-d/pixel-circle.js +0 -0
  262. package/programs/vectorfields/index.js +0 -3
  263. package/programs/vectorfields/logics/index.js +0 -5
  264. package/publish.bat +0 -60
  265. package/rangerings/enum.js +0 -3
  266. package/rangerings/index.js +0 -5
  267. package/shape-on-terrain/goal.md +0 -12
  268. package/tests/Math/junction/arc-plane.test.ts +0 -133
  269. package/tests/Math/junction/plane-plane.test.ts +0 -82
  270. package/tests/Math/plane.test.ts +0 -43
  271. package/tests/Math/vec3.test.ts +0 -14
  272. package/timetracks/index.js +0 -6
  273. package/timetracks/readme.md +0 -1
  274. package/tsconfig.json +0 -22
  275. package/util/account/index.js +0 -6
  276. package/util/account/single-attribute-buffer-management/index.ts +0 -13
  277. package/util/account/single-attribute-buffer-management/types.ts +0 -39
  278. package/util/algorithms/index.js +0 -0
  279. package/util/check/get.js +0 -13
  280. package/util/check/index.js +0 -0
  281. package/util/check/typecheck.js +0 -39
  282. package/util/gl-util/buffer/index.ts +0 -6
  283. package/util/gl-util/buffer/types.ts +0 -13
  284. package/util/gl-util/draw-options/methods.ts +0 -66
  285. package/util/gl-util/draw-options/types.ts +0 -28
  286. package/util/gl-util/uniform-block/roadmap.md +0 -70
  287. package/util/gl-util/uniform-block/shader.js +0 -0
  288. package/util/gl-util/uniform-block/types.ts +0 -27
  289. package/util/heatwavedatamanager/index.js +0 -3
  290. package/util/index.js +0 -13
  291. package/util/interpolation/index.js +0 -0
  292. package/util/interpolation/timetrack/index.js +0 -9
  293. package/util/jshelpers/index.js +0 -1
  294. package/util/programs/index.js +0 -1
  295. package/util/shaderfunctions/index.js +0 -2
  296. package/util/surface-line-data/cut-arc.js +0 -0
  297. package/util/surface-line-data/rbush-manager.js +0 -0
  298. package/util/surface-line-data/types.ts +0 -27
  299. package/util/surface-line-data/web-worker.js +0 -0
  300. package/util/webglobe/gldefaultstates.js +0 -5
  301. package/util/webglobe/index.js +0 -2
  302. package/waveparticles/index.js +0 -3
  303. package/wind/index.js +0 -5
  304. package/write-text/index.js +0 -1
@@ -1,187 +1,156 @@
1
- import "./types";
2
-
3
- const typeSizes = {
4
- 'float': 4,
5
- 'vec2': 8,
6
- 'vec3': 16, // vec3 takes up same space as vec4 due to alignment
7
- 'vec4': 16,
8
- 'mat2': 32, // 2 vec4s (16 * 2)
9
- 'mat3': 48, // 3 vec4s (16 * 3)
10
- 'mat4': 64, // 4 vec4s (16 * 4)
11
- 'int': 4,
12
- 'ivec2': 8,
13
- 'ivec3': 16,
14
- 'ivec4': 16,
15
- 'bool': 4
16
- };
17
-
18
- const typeAlignments = {
19
- 'float': 4,
20
- 'vec2': 8,
21
- 'vec3': 16,
22
- 'vec4': 16,
23
- 'mat2': 16, // aligns to vec4 boundary
24
- 'mat3': 16, // aligns to vec4 boundary
25
- 'mat4': 16, // aligns to vec4 boundary
26
- 'int': 4,
27
- 'ivec2': 8,
28
- 'ivec3': 16,
29
- 'ivec4': 16,
30
- 'bool': 4
31
- };
32
-
33
-
34
- const typeArrayConstructors = {
35
- 'float': Float32Array,
36
- 'vec2': Float32Array,
37
- 'vec3': Float32Array,
38
- 'vec4': Float32Array,
39
- 'mat2': Float32Array,
40
- 'mat3': Float32Array,
41
- 'mat4': Float32Array,
42
- 'int': Int32Array,
43
- 'ivec2': Int32Array,
44
- 'ivec3': Int32Array,
45
- 'ivec4': Int32Array,
46
- 'bool': Float32Array
47
- };
48
-
49
-
50
- class UniformBlockManager {
51
-
52
- /**
53
- *
54
- * @param {UniformBlockName} blockName
55
- * @param {Array<UniformBlockMember} blockMembers
56
- * @param {string} prefix usage name of block in the shader
57
- */
58
-
59
- blockName: string;
60
- blockMembers: Array<UniformBlockMember>;
61
- bindingPoint: number;
62
- prefix: string;
63
- offsetMap: Map<string, number>;
64
- size: number;
65
-
66
- constructor(blockName: string, blockMembers: Array<UniformBlockMember>, bindingPoint: number, prefix: string = "") {
67
- this.blockName = blockName;
68
- this.blockMembers = blockMembers;
69
- this.bindingPoint = bindingPoint;
70
- this.prefix = prefix;
71
- this.offsetMap = this.__create_LayoutSTD140_OffsetMap();
72
- this.size = this.__calculateSize();
73
- }
74
-
75
-
76
-
77
- glslCode() {
78
- let code = `layout(std140) uniform ${this.blockName} {`;
79
- for (const member of this.blockMembers) {
80
- const { name, type } = member;
81
- code += `${type} ${this.prefix}${name};`;
82
- }
83
- if (this.prefix) {
84
- code += `} ${this.prefix};`;
85
- } else {
86
- code += `};`;
87
- }
88
- return code;
89
- }
90
-
91
-
92
- createUBO(gl: WebGL2RenderingContext, bufferWriteType: string = "STATIC_DRAW"): UBOHandler {
93
- const ubo = gl.createBuffer();
94
- gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
95
- // @ts-ignore
96
- gl.bufferData(gl.UNIFORM_BUFFER, this.size, gl[bufferWriteType]);
97
- gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, ubo);
98
-
99
- for (const member of this.blockMembers) {
100
- const { name, type, value = null } = member;;
101
- const offset = this.offsetMap.get(name) as number;
102
- const data = (value === null) ? new typeArrayConstructors[type](typeSizes[type] / 4).fill(NaN) : value;
103
- gl.bufferSubData(gl.UNIFORM_BUFFER, offset, data);
104
- }
105
- gl.bindBuffer(gl.UNIFORM_BUFFER, null);
106
-
107
- return { // TODO typedef this, encapsulate this in a class or something, ask ai
108
- ubo,
109
- update: (nameValueMap: NameValueMap) => this.updateUBO(gl, ubo, nameValueMap),
110
- bind: () => this.bind(gl, ubo),
111
- unbind: () => this.unbind(gl),
112
- free: () => gl.deleteBuffer(ubo),
113
- };
114
- }
115
-
116
-
117
- updateUBO(gl: WebGL2RenderingContext, ubo: WebGLBuffer, nameValueMap: NameValueMap) {
118
- gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
119
- for (const [name, value] of nameValueMap.entries()) {
120
- const offset = this.offsetMap.get(name);
121
- if (offset === undefined) {
122
- throw new Error(`Uniform block member ${name} not found in offset map.`);
123
- }
124
- // @ts-ignore
125
- const type = this.blockMembers.find(member => member.name === name).type;
126
- let data: Float32Array | Int32Array | ArrayBuffer | DataView;
127
- if (Array.isArray(value)) {
128
- data = new typeArrayConstructors[type](value);
129
- } else if (typeof value === 'number') {
130
- data = new typeArrayConstructors[type]([value]);
131
- } else if (value instanceof ArrayBuffer) {
132
- data = new typeArrayConstructors[type](value);
133
- } else if (ArrayBuffer.isView(value) && !(value instanceof DataView))
134
- data = (typeof value === 'number') ? new typeArrayConstructors[type]([value]) : new typeArrayConstructors[type](value);
135
- else {
136
- throw new Error(`Unsupported value type for ${name}: ${typeof value}`);
137
- }
138
- console.log("Data to be uploaded:", data);
139
- gl.bufferSubData(gl.UNIFORM_BUFFER, offset, data);
140
- }
141
- gl.bindBuffer(gl.UNIFORM_BUFFER, null);
142
- }
143
-
144
- // call this after linking the program
145
- assignBindingPoint(gl: WebGL2RenderingContext, program: WebGLProgram) {
146
- const blockIndex = gl.getUniformBlockIndex(program, this.blockName);
147
- gl.uniformBlockBinding(program, blockIndex, this.bindingPoint);
148
- }
149
-
150
- // call this before drawing
151
- bind(gl: WebGL2RenderingContext, ubo: WebGLBuffer) {
152
- gl.bindBufferBase(gl.UNIFORM_BUFFER, this.bindingPoint, ubo);
153
- }
154
-
155
- // call this right after drawing
156
- unbind(gl: WebGL2RenderingContext) {
157
- gl.bindBufferBase(gl.UNIFORM_BUFFER, this.bindingPoint, null);
158
- }
159
-
160
-
161
- // implicit methods
162
- __create_LayoutSTD140_OffsetMap(): Map<string, number> {
163
- let offset = 0;
164
- const offsetMap = new Map();
165
- for (const member of this.blockMembers) {
166
- const { name, type } = member;
167
- const size = typeSizes[type];
168
- const alignment = typeAlignments[type];
169
- const padding = (alignment - (offset % alignment)) % alignment;
170
- offset += padding;
171
- offsetMap.set(name, offset);
172
- offset += size;
173
- }
174
- return offsetMap;
175
- }
176
-
177
- // __create_LayoutSTD140_OffsetMap() should be called before this
178
- __calculateSize() {
179
- const lastOffset = Array.from(this.offsetMap.values()).pop() as number || 0;
180
- const lastItemAlignment = typeAlignments[this.blockMembers[this.blockMembers.length - 1].type];
181
- return lastOffset + lastItemAlignment;
182
- }
183
-
184
- }
185
-
186
-
187
- export { UniformBlockManager };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UniformBlockManager = void 0;
4
+ require("./types");
5
+ const typeSizes = {
6
+ 'float': 4,
7
+ 'vec2': 8,
8
+ 'vec3': 16, // vec3 takes up same space as vec4 due to alignment
9
+ 'vec4': 16,
10
+ 'mat2': 32, // 2 vec4s (16 * 2)
11
+ 'mat3': 48, // 3 vec4s (16 * 3)
12
+ 'mat4': 64, // 4 vec4s (16 * 4)
13
+ 'int': 4,
14
+ 'ivec2': 8,
15
+ 'ivec3': 16,
16
+ 'ivec4': 16,
17
+ 'bool': 4
18
+ };
19
+ const typeAlignments = {
20
+ 'float': 4,
21
+ 'vec2': 8,
22
+ 'vec3': 16,
23
+ 'vec4': 16,
24
+ 'mat2': 16, // aligns to vec4 boundary
25
+ 'mat3': 16, // aligns to vec4 boundary
26
+ 'mat4': 16, // aligns to vec4 boundary
27
+ 'int': 4,
28
+ 'ivec2': 8,
29
+ 'ivec3': 16,
30
+ 'ivec4': 16,
31
+ 'bool': 4
32
+ };
33
+ const typeArrayConstructors = {
34
+ 'float': Float32Array,
35
+ 'vec2': Float32Array,
36
+ 'vec3': Float32Array,
37
+ 'vec4': Float32Array,
38
+ 'mat2': Float32Array,
39
+ 'mat3': Float32Array,
40
+ 'mat4': Float32Array,
41
+ 'int': Int32Array,
42
+ 'ivec2': Int32Array,
43
+ 'ivec3': Int32Array,
44
+ 'ivec4': Int32Array,
45
+ 'bool': Float32Array
46
+ };
47
+ class UniformBlockManager {
48
+ constructor(blockName, blockMembers, bindingPoint, prefix = "") {
49
+ this.blockName = blockName;
50
+ this.blockMembers = blockMembers;
51
+ this.bindingPoint = bindingPoint;
52
+ this.prefix = prefix;
53
+ this.offsetMap = this.__create_LayoutSTD140_OffsetMap();
54
+ this.size = this.__calculateSize();
55
+ }
56
+ glslCode() {
57
+ let code = `layout(std140) uniform ${this.blockName} {`;
58
+ for (const member of this.blockMembers) {
59
+ const { name, type } = member;
60
+ code += `${type} ${this.prefix}${name};`;
61
+ }
62
+ if (this.prefix) {
63
+ code += `} ${this.prefix};`;
64
+ }
65
+ else {
66
+ code += `};`;
67
+ }
68
+ return code;
69
+ }
70
+ createUBO(gl, bufferWriteType = "STATIC_DRAW") {
71
+ const ubo = gl.createBuffer();
72
+ gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
73
+ // @ts-ignore
74
+ gl.bufferData(gl.UNIFORM_BUFFER, this.size, gl[bufferWriteType]);
75
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, ubo);
76
+ for (const member of this.blockMembers) {
77
+ const { name, type, value = null } = member;
78
+ ;
79
+ const offset = this.offsetMap.get(name);
80
+ const data = (value === null) ? new typeArrayConstructors[type](typeSizes[type] / 4).fill(NaN) : value;
81
+ gl.bufferSubData(gl.UNIFORM_BUFFER, offset, data);
82
+ }
83
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
84
+ return {
85
+ ubo,
86
+ update: (nameValueMap) => this.updateUBO(gl, ubo, nameValueMap),
87
+ bind: () => this.bind(gl, ubo),
88
+ unbind: () => this.unbind(gl),
89
+ free: () => gl.deleteBuffer(ubo),
90
+ };
91
+ }
92
+ updateUBO(gl, ubo, nameValueMap) {
93
+ gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
94
+ for (const [name, value] of nameValueMap.entries()) {
95
+ const offset = this.offsetMap.get(name);
96
+ if (offset === undefined) {
97
+ throw new Error(`Uniform block member ${name} not found in offset map.`);
98
+ }
99
+ // @ts-ignore
100
+ const type = this.blockMembers.find(member => member.name === name).type;
101
+ let data;
102
+ if (Array.isArray(value)) {
103
+ data = new typeArrayConstructors[type](value);
104
+ }
105
+ else if (typeof value === 'number') {
106
+ data = new typeArrayConstructors[type]([value]);
107
+ }
108
+ else if (value instanceof ArrayBuffer) {
109
+ data = new typeArrayConstructors[type](value);
110
+ }
111
+ else if (ArrayBuffer.isView(value) && !(value instanceof DataView))
112
+ data = (typeof value === 'number') ? new typeArrayConstructors[type]([value]) : new typeArrayConstructors[type](value);
113
+ else {
114
+ throw new Error(`Unsupported value type for ${name}: ${typeof value}`);
115
+ }
116
+ console.log("Data to be uploaded:", data);
117
+ gl.bufferSubData(gl.UNIFORM_BUFFER, offset, data);
118
+ }
119
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
120
+ }
121
+ // call this after linking the program
122
+ assignBindingPoint(gl, program) {
123
+ const blockIndex = gl.getUniformBlockIndex(program, this.blockName);
124
+ gl.uniformBlockBinding(program, blockIndex, this.bindingPoint);
125
+ }
126
+ // call this before drawing
127
+ bind(gl, ubo) {
128
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, this.bindingPoint, ubo);
129
+ }
130
+ // call this right after drawing
131
+ unbind(gl) {
132
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, this.bindingPoint, null);
133
+ }
134
+ // implicit methods
135
+ __create_LayoutSTD140_OffsetMap() {
136
+ let offset = 0;
137
+ const offsetMap = new Map();
138
+ for (const member of this.blockMembers) {
139
+ const { name, type } = member;
140
+ const size = typeSizes[type];
141
+ const alignment = typeAlignments[type];
142
+ const padding = (alignment - (offset % alignment)) % alignment;
143
+ offset += padding;
144
+ offsetMap.set(name, offset);
145
+ offset += size;
146
+ }
147
+ return offsetMap;
148
+ }
149
+ // __create_LayoutSTD140_OffsetMap() should be called before this
150
+ __calculateSize() {
151
+ const lastOffset = Array.from(this.offsetMap.values()).pop() || 0;
152
+ const lastItemAlignment = typeAlignments[this.blockMembers[this.blockMembers.length - 1].type];
153
+ return lastOffset + lastItemAlignment;
154
+ }
155
+ }
156
+ exports.UniformBlockManager = UniformBlockManager;
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * @typedef {string} UniformBlockName
4
+ *
5
+ * @typedef {string} GLSLType | mat4, mat3, vec4, vec3, vec2, float, int, bool
6
+ * @typedef {{name: string, type: GLSLType, value: null|Float32Array}} UniformBlockMember
7
+ *
8
+ */