molstar 4.2.0 → 4.3.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 (339) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +197 -197
  3. package/build/viewer/embedded.html +52 -52
  4. package/build/viewer/index.html +129 -129
  5. package/build/viewer/molstar.js +1 -1
  6. package/build/viewer/molstar.js.LICENSE.txt +9 -0
  7. package/lib/apps/docking-viewer/index.html +36 -36
  8. package/lib/apps/mesoscale-explorer/index.html +100 -100
  9. package/lib/apps/mesoscale-explorer/style.scss +33 -33
  10. package/lib/apps/viewer/app.d.ts +2 -1
  11. package/lib/apps/viewer/app.js +2 -1
  12. package/lib/apps/viewer/embedded.html +52 -52
  13. package/lib/apps/viewer/index.html +129 -129
  14. package/lib/cli/chem-comp-dict/create-ions.js +9 -9
  15. package/lib/cli/chem-comp-dict/create-saccharides.js +9 -9
  16. package/lib/cli/cifschema/util/generate.js +12 -12
  17. package/lib/cli/lipid-params/index.js +9 -9
  18. package/lib/commonjs/apps/viewer/app.d.ts +2 -1
  19. package/lib/commonjs/apps/viewer/app.js +1 -0
  20. package/lib/commonjs/cli/chem-comp-dict/create-ions.js +9 -9
  21. package/lib/commonjs/cli/chem-comp-dict/create-saccharides.js +9 -9
  22. package/lib/commonjs/cli/cifschema/util/generate.js +12 -12
  23. package/lib/commonjs/cli/lipid-params/index.js +9 -9
  24. package/lib/commonjs/examples/alpha-orbitals/example-data.js +160 -160
  25. package/lib/commonjs/extensions/alpha-orbitals/gpu/shader.frag.js +136 -136
  26. package/lib/commonjs/extensions/assembly-symmetry/prop.js +24 -24
  27. package/lib/commonjs/extensions/dnatco/confal-pyramids/behavior.js +5 -5
  28. package/lib/commonjs/extensions/dnatco/ntc-tube/behavior.js +5 -5
  29. package/lib/commonjs/extensions/geo-export/usdz-exporter.js +41 -41
  30. package/lib/commonjs/extensions/meshes/mesh-extension.d.ts +1 -0
  31. package/lib/commonjs/extensions/mp4-export/encoder.js +1 -1
  32. package/lib/commonjs/extensions/mvs/components/annotation-label/representation.d.ts +0 -2
  33. package/lib/commonjs/extensions/mvs/components/custom-label/representation.d.ts +2 -2
  34. package/lib/commonjs/extensions/mvs/tree/mvs/mvs-builder.d.ts +8 -2
  35. package/lib/commonjs/extensions/sb-ncbr/index.d.ts +8 -0
  36. package/lib/commonjs/extensions/sb-ncbr/index.js +14 -1
  37. package/lib/commonjs/extensions/sb-ncbr/tunnels/actions.d.ts +20 -0
  38. package/lib/commonjs/extensions/sb-ncbr/tunnels/actions.js +89 -0
  39. package/lib/commonjs/extensions/sb-ncbr/tunnels/algorithm.d.ts +26 -0
  40. package/lib/commonjs/extensions/sb-ncbr/tunnels/algorithm.js +474 -0
  41. package/lib/commonjs/extensions/sb-ncbr/tunnels/behavior.d.ts +40 -0
  42. package/lib/commonjs/extensions/sb-ncbr/tunnels/behavior.js +96 -0
  43. package/lib/commonjs/extensions/sb-ncbr/tunnels/data-model.d.ts +146 -0
  44. package/lib/commonjs/extensions/sb-ncbr/tunnels/data-model.js +28 -0
  45. package/lib/commonjs/extensions/sb-ncbr/tunnels/examples.d.ts +12 -0
  46. package/lib/commonjs/extensions/sb-ncbr/tunnels/examples.js +54 -0
  47. package/lib/commonjs/extensions/sb-ncbr/tunnels/props.d.ts +19 -0
  48. package/lib/commonjs/extensions/sb-ncbr/tunnels/props.js +26 -0
  49. package/lib/commonjs/extensions/sb-ncbr/tunnels/representation.d.ts +29 -0
  50. package/lib/commonjs/extensions/sb-ncbr/tunnels/representation.js +99 -0
  51. package/lib/commonjs/mol-canvas3d/canvas3d.d.ts +17 -0
  52. package/lib/commonjs/mol-canvas3d/canvas3d.js +4 -0
  53. package/lib/commonjs/mol-canvas3d/passes/dof.d.ts +34 -0
  54. package/lib/commonjs/mol-canvas3d/passes/dof.js +167 -0
  55. package/lib/commonjs/mol-canvas3d/passes/draw.d.ts +2 -0
  56. package/lib/commonjs/mol-canvas3d/passes/draw.js +31 -8
  57. package/lib/commonjs/mol-canvas3d/passes/image.d.ts +8 -0
  58. package/lib/commonjs/mol-canvas3d/passes/postprocessing.d.ts +8 -0
  59. package/lib/commonjs/mol-canvas3d/passes/postprocessing.js +5 -0
  60. package/lib/commonjs/mol-geo/geometry/lines/lines.d.ts +0 -1
  61. package/lib/commonjs/mol-gl/shader/background.frag.js +95 -95
  62. package/lib/commonjs/mol-gl/shader/background.vert.js +11 -11
  63. package/lib/commonjs/mol-gl/shader/blend-back-dpoit.frag.js +13 -13
  64. package/lib/commonjs/mol-gl/shader/bloom/blur.frag.js +28 -28
  65. package/lib/commonjs/mol-gl/shader/bloom/composite.frag.js +33 -33
  66. package/lib/commonjs/mol-gl/shader/bloom/luminosity.frag.js +52 -52
  67. package/lib/commonjs/mol-gl/shader/cas.frag.js +144 -144
  68. package/lib/commonjs/mol-gl/shader/chunks/apply-fog.glsl.js +31 -31
  69. package/lib/commonjs/mol-gl/shader/chunks/apply-interior-color.glsl.js +12 -12
  70. package/lib/commonjs/mol-gl/shader/chunks/apply-light-color.glsl.js +77 -77
  71. package/lib/commonjs/mol-gl/shader/chunks/apply-marker-color.glsl.js +16 -16
  72. package/lib/commonjs/mol-gl/shader/chunks/assign-clipping-varying.glsl.js +8 -8
  73. package/lib/commonjs/mol-gl/shader/chunks/assign-color-varying.glsl.js +140 -140
  74. package/lib/commonjs/mol-gl/shader/chunks/assign-group.glsl.js +6 -6
  75. package/lib/commonjs/mol-gl/shader/chunks/assign-marker-varying.glsl.js +8 -8
  76. package/lib/commonjs/mol-gl/shader/chunks/assign-material-color.glsl.js +112 -112
  77. package/lib/commonjs/mol-gl/shader/chunks/assign-position.glsl.js +14 -14
  78. package/lib/commonjs/mol-gl/shader/chunks/assign-size.glsl.js +18 -18
  79. package/lib/commonjs/mol-gl/shader/chunks/check-picking-alpha.glsl.js +12 -12
  80. package/lib/commonjs/mol-gl/shader/chunks/check-transparency.glsl.js +16 -16
  81. package/lib/commonjs/mol-gl/shader/chunks/clip-instance.glsl.js +7 -7
  82. package/lib/commonjs/mol-gl/shader/chunks/clip-pixel.glsl.js +5 -5
  83. package/lib/commonjs/mol-gl/shader/chunks/color-frag-params.glsl.js +60 -60
  84. package/lib/commonjs/mol-gl/shader/chunks/color-vert-params.glsl.js +122 -122
  85. package/lib/commonjs/mol-gl/shader/chunks/common-clip.glsl.js +104 -104
  86. package/lib/commonjs/mol-gl/shader/chunks/common-frag-params.glsl.js +150 -150
  87. package/lib/commonjs/mol-gl/shader/chunks/common-vert-params.glsl.js +61 -61
  88. package/lib/commonjs/mol-gl/shader/chunks/common.glsl.js +234 -234
  89. package/lib/commonjs/mol-gl/shader/chunks/dpoit-write.glsl.js +62 -62
  90. package/lib/commonjs/mol-gl/shader/chunks/fade-lod.glsl.js +42 -42
  91. package/lib/commonjs/mol-gl/shader/chunks/float-to-rgba.glsl.js +39 -39
  92. package/lib/commonjs/mol-gl/shader/chunks/light-frag-params.glsl.js +127 -127
  93. package/lib/commonjs/mol-gl/shader/chunks/matrix-scale.glsl.js +5 -5
  94. package/lib/commonjs/mol-gl/shader/chunks/normal-frag-params.glsl.js +2 -2
  95. package/lib/commonjs/mol-gl/shader/chunks/read-from-texture.glsl.js +14 -14
  96. package/lib/commonjs/mol-gl/shader/chunks/rgba-to-float.glsl.js +84 -84
  97. package/lib/commonjs/mol-gl/shader/chunks/size-vert-params.glsl.js +11 -11
  98. package/lib/commonjs/mol-gl/shader/chunks/texture3d-from-1d-trilinear.glsl.js +23 -23
  99. package/lib/commonjs/mol-gl/shader/chunks/texture3d-from-2d-linear.glsl.js +17 -17
  100. package/lib/commonjs/mol-gl/shader/chunks/texture3d-from-2d-nearest.glsl.js +8 -8
  101. package/lib/commonjs/mol-gl/shader/chunks/wboit-write.glsl.js +25 -25
  102. package/lib/commonjs/mol-gl/shader/compose.frag.js +12 -12
  103. package/lib/commonjs/mol-gl/shader/compute/color-smoothing/accumulate.frag.js +23 -23
  104. package/lib/commonjs/mol-gl/shader/compute/color-smoothing/accumulate.vert.js +43 -43
  105. package/lib/commonjs/mol-gl/shader/compute/color-smoothing/normalize.frag.js +15 -15
  106. package/lib/commonjs/mol-gl/shader/copy.frag.js +11 -11
  107. package/lib/commonjs/mol-gl/shader/cylinders.frag.js +266 -266
  108. package/lib/commonjs/mol-gl/shader/cylinders.vert.js +89 -89
  109. package/lib/commonjs/mol-gl/shader/depth-merge.frag.js +23 -23
  110. package/lib/commonjs/mol-gl/shader/direct-volume.frag.js +362 -362
  111. package/lib/commonjs/mol-gl/shader/direct-volume.vert.js +41 -41
  112. package/lib/commonjs/mol-gl/shader/dof.frag.d.ts +7 -0
  113. package/lib/commonjs/mol-gl/shader/dof.frag.js +122 -0
  114. package/lib/commonjs/mol-gl/shader/evaluate-dpoit.frag.js +10 -10
  115. package/lib/commonjs/mol-gl/shader/evaluate-wboit.frag.js +17 -17
  116. package/lib/commonjs/mol-gl/shader/fxaa.frag.js +228 -228
  117. package/lib/commonjs/mol-gl/shader/gaussian-density.frag.js +49 -49
  118. package/lib/commonjs/mol-gl/shader/gaussian-density.vert.js +27 -27
  119. package/lib/commonjs/mol-gl/shader/hi-z.frag.js +18 -18
  120. package/lib/commonjs/mol-gl/shader/histogram-pyramid/reduction.frag.js +58 -58
  121. package/lib/commonjs/mol-gl/shader/histogram-pyramid/sum.frag.js +19 -19
  122. package/lib/commonjs/mol-gl/shader/image.frag.js +169 -169
  123. package/lib/commonjs/mol-gl/shader/image.vert.js +21 -21
  124. package/lib/commonjs/mol-gl/shader/lines.frag.js +42 -42
  125. package/lib/commonjs/mol-gl/shader/lines.vert.js +117 -117
  126. package/lib/commonjs/mol-gl/shader/marching-cubes/active-voxels.frag.js +70 -70
  127. package/lib/commonjs/mol-gl/shader/marching-cubes/isosurface.frag.js +311 -311
  128. package/lib/commonjs/mol-gl/shader/marking/edge.frag.js +28 -28
  129. package/lib/commonjs/mol-gl/shader/marking/overlay.frag.js +26 -26
  130. package/lib/commonjs/mol-gl/shader/mesh.frag.js +65 -65
  131. package/lib/commonjs/mol-gl/shader/mesh.vert.js +49 -49
  132. package/lib/commonjs/mol-gl/shader/outlines.frag.js +95 -95
  133. package/lib/commonjs/mol-gl/shader/points.frag.js +59 -59
  134. package/lib/commonjs/mol-gl/shader/points.vert.js +38 -38
  135. package/lib/commonjs/mol-gl/shader/postprocessing.frag.js +150 -150
  136. package/lib/commonjs/mol-gl/shader/quad.vert.js +10 -10
  137. package/lib/commonjs/mol-gl/shader/shadows.frag.js +123 -123
  138. package/lib/commonjs/mol-gl/shader/smaa/blend.frag.js +56 -56
  139. package/lib/commonjs/mol-gl/shader/smaa/blend.vert.js +25 -25
  140. package/lib/commonjs/mol-gl/shader/smaa/edges.frag.js +66 -66
  141. package/lib/commonjs/mol-gl/shader/smaa/edges.vert.js +26 -26
  142. package/lib/commonjs/mol-gl/shader/smaa/weights.frag.js +206 -206
  143. package/lib/commonjs/mol-gl/shader/smaa/weights.vert.js +32 -32
  144. package/lib/commonjs/mol-gl/shader/spheres.frag.js +148 -148
  145. package/lib/commonjs/mol-gl/shader/spheres.vert.js +132 -132
  146. package/lib/commonjs/mol-gl/shader/ssao-blur.frag.js +97 -97
  147. package/lib/commonjs/mol-gl/shader/ssao.frag.js +211 -211
  148. package/lib/commonjs/mol-gl/shader/text.frag.js +85 -85
  149. package/lib/commonjs/mol-gl/shader/text.vert.js +85 -85
  150. package/lib/commonjs/mol-gl/shader/util/grid3d-template.frag.js +46 -46
  151. package/lib/commonjs/mol-gl/shader-code.js +15 -15
  152. package/lib/commonjs/mol-gl/webgl/compat.js +12 -12
  153. package/lib/commonjs/mol-gl/webgl/context.js +1 -0
  154. package/lib/commonjs/mol-gl/webgl/timer.d.ts +1 -1
  155. package/lib/commonjs/mol-gl/webgl/timer.js +8 -1
  156. package/lib/commonjs/mol-math/linear-algebra/3d/minimize-rmsd.js +2 -1
  157. package/lib/commonjs/mol-plugin/animation-loop.d.ts +1 -0
  158. package/lib/commonjs/mol-plugin/behavior/dynamic/volume-streaming/behavior.d.ts +6 -6
  159. package/lib/commonjs/mol-plugin/behavior/dynamic/volume-streaming/model.d.ts +1 -1
  160. package/lib/commonjs/mol-plugin/behavior/dynamic/volume-streaming/transformers.d.ts +3 -3
  161. package/lib/commonjs/mol-plugin-state/animation/built-in/state-snapshots.js +7 -3
  162. package/lib/commonjs/mol-plugin-ui/viewport/simple-settings.js +3 -0
  163. package/lib/commonjs/servers/common/swagger-ui/indexTemplate.js +66 -66
  164. package/lib/commonjs/servers/volume/config.js +5 -5
  165. package/lib/examples/alpha-orbitals/example-data.js +160 -160
  166. package/lib/examples/alpha-orbitals/index.html +72 -72
  167. package/lib/examples/basic-wrapper/index.html +137 -137
  168. package/lib/examples/lighting/index.html +88 -88
  169. package/lib/examples/proteopedia-wrapper/index.html +236 -236
  170. package/lib/extensions/alpha-orbitals/gpu/shader.frag.js +136 -136
  171. package/lib/extensions/assembly-symmetry/prop.js +24 -24
  172. package/lib/extensions/dnatco/confal-pyramids/behavior.js +5 -5
  173. package/lib/extensions/dnatco/ntc-tube/behavior.js +5 -5
  174. package/lib/extensions/geo-export/usdz-exporter.js +41 -41
  175. package/lib/extensions/meshes/mesh-extension.d.ts +1 -0
  176. package/lib/extensions/mp4-export/encoder.js +1 -1
  177. package/lib/extensions/mvs/components/annotation-label/representation.d.ts +0 -2
  178. package/lib/extensions/mvs/components/custom-label/representation.d.ts +2 -2
  179. package/lib/extensions/mvs/tree/mvs/mvs-builder.d.ts +8 -2
  180. package/lib/extensions/sb-ncbr/index.d.ts +8 -0
  181. package/lib/extensions/sb-ncbr/index.js +8 -0
  182. package/lib/extensions/sb-ncbr/tunnels/actions.d.ts +20 -0
  183. package/lib/extensions/sb-ncbr/tunnels/actions.js +86 -0
  184. package/lib/extensions/sb-ncbr/tunnels/algorithm.d.ts +26 -0
  185. package/lib/extensions/sb-ncbr/tunnels/algorithm.js +469 -0
  186. package/lib/extensions/sb-ncbr/tunnels/behavior.d.ts +40 -0
  187. package/lib/extensions/sb-ncbr/tunnels/behavior.js +92 -0
  188. package/lib/extensions/sb-ncbr/tunnels/data-model.d.ts +146 -0
  189. package/lib/extensions/sb-ncbr/tunnels/data-model.js +23 -0
  190. package/lib/extensions/sb-ncbr/tunnels/examples.d.ts +12 -0
  191. package/lib/extensions/sb-ncbr/tunnels/examples.js +49 -0
  192. package/lib/extensions/sb-ncbr/tunnels/props.d.ts +19 -0
  193. package/lib/extensions/sb-ncbr/tunnels/props.js +22 -0
  194. package/lib/extensions/sb-ncbr/tunnels/representation.d.ts +29 -0
  195. package/lib/extensions/sb-ncbr/tunnels/representation.js +96 -0
  196. package/lib/mol-canvas3d/canvas3d.d.ts +17 -0
  197. package/lib/mol-canvas3d/canvas3d.js +4 -0
  198. package/lib/mol-canvas3d/passes/dof.d.ts +34 -0
  199. package/lib/mol-canvas3d/passes/dof.js +163 -0
  200. package/lib/mol-canvas3d/passes/draw.d.ts +2 -0
  201. package/lib/mol-canvas3d/passes/draw.js +31 -8
  202. package/lib/mol-canvas3d/passes/image.d.ts +8 -0
  203. package/lib/mol-canvas3d/passes/postprocessing.d.ts +8 -0
  204. package/lib/mol-canvas3d/passes/postprocessing.js +5 -0
  205. package/lib/mol-geo/geometry/lines/lines.d.ts +0 -1
  206. package/lib/mol-gl/shader/background.frag.js +95 -95
  207. package/lib/mol-gl/shader/background.vert.js +11 -11
  208. package/lib/mol-gl/shader/blend-back-dpoit.frag.js +13 -13
  209. package/lib/mol-gl/shader/bloom/blur.frag.js +28 -28
  210. package/lib/mol-gl/shader/bloom/composite.frag.js +33 -33
  211. package/lib/mol-gl/shader/bloom/luminosity.frag.js +52 -52
  212. package/lib/mol-gl/shader/cas.frag.js +144 -144
  213. package/lib/mol-gl/shader/chunks/apply-fog.glsl.js +31 -31
  214. package/lib/mol-gl/shader/chunks/apply-interior-color.glsl.js +12 -12
  215. package/lib/mol-gl/shader/chunks/apply-light-color.glsl.js +77 -77
  216. package/lib/mol-gl/shader/chunks/apply-marker-color.glsl.js +16 -16
  217. package/lib/mol-gl/shader/chunks/assign-clipping-varying.glsl.js +8 -8
  218. package/lib/mol-gl/shader/chunks/assign-color-varying.glsl.js +140 -140
  219. package/lib/mol-gl/shader/chunks/assign-group.glsl.js +6 -6
  220. package/lib/mol-gl/shader/chunks/assign-marker-varying.glsl.js +8 -8
  221. package/lib/mol-gl/shader/chunks/assign-material-color.glsl.js +112 -112
  222. package/lib/mol-gl/shader/chunks/assign-position.glsl.js +14 -14
  223. package/lib/mol-gl/shader/chunks/assign-size.glsl.js +18 -18
  224. package/lib/mol-gl/shader/chunks/check-picking-alpha.glsl.js +12 -12
  225. package/lib/mol-gl/shader/chunks/check-transparency.glsl.js +16 -16
  226. package/lib/mol-gl/shader/chunks/clip-instance.glsl.js +7 -7
  227. package/lib/mol-gl/shader/chunks/clip-pixel.glsl.js +5 -5
  228. package/lib/mol-gl/shader/chunks/color-frag-params.glsl.js +60 -60
  229. package/lib/mol-gl/shader/chunks/color-vert-params.glsl.js +122 -122
  230. package/lib/mol-gl/shader/chunks/common-clip.glsl.js +104 -104
  231. package/lib/mol-gl/shader/chunks/common-frag-params.glsl.js +150 -150
  232. package/lib/mol-gl/shader/chunks/common-vert-params.glsl.js +61 -61
  233. package/lib/mol-gl/shader/chunks/common.glsl.js +234 -234
  234. package/lib/mol-gl/shader/chunks/dpoit-write.glsl.js +62 -62
  235. package/lib/mol-gl/shader/chunks/fade-lod.glsl.js +42 -42
  236. package/lib/mol-gl/shader/chunks/float-to-rgba.glsl.js +39 -39
  237. package/lib/mol-gl/shader/chunks/light-frag-params.glsl.js +127 -127
  238. package/lib/mol-gl/shader/chunks/matrix-scale.glsl.js +5 -5
  239. package/lib/mol-gl/shader/chunks/normal-frag-params.glsl.js +2 -2
  240. package/lib/mol-gl/shader/chunks/read-from-texture.glsl.js +14 -14
  241. package/lib/mol-gl/shader/chunks/rgba-to-float.glsl.js +84 -84
  242. package/lib/mol-gl/shader/chunks/size-vert-params.glsl.js +11 -11
  243. package/lib/mol-gl/shader/chunks/texture3d-from-1d-trilinear.glsl.js +23 -23
  244. package/lib/mol-gl/shader/chunks/texture3d-from-2d-linear.glsl.js +17 -17
  245. package/lib/mol-gl/shader/chunks/texture3d-from-2d-nearest.glsl.js +8 -8
  246. package/lib/mol-gl/shader/chunks/wboit-write.glsl.js +25 -25
  247. package/lib/mol-gl/shader/compose.frag.js +12 -12
  248. package/lib/mol-gl/shader/compute/color-smoothing/accumulate.frag.js +23 -23
  249. package/lib/mol-gl/shader/compute/color-smoothing/accumulate.vert.js +43 -43
  250. package/lib/mol-gl/shader/compute/color-smoothing/normalize.frag.js +15 -15
  251. package/lib/mol-gl/shader/copy.frag.js +11 -11
  252. package/lib/mol-gl/shader/cylinders.frag.js +266 -266
  253. package/lib/mol-gl/shader/cylinders.vert.js +89 -89
  254. package/lib/mol-gl/shader/depth-merge.frag.js +23 -23
  255. package/lib/mol-gl/shader/direct-volume.frag.js +362 -362
  256. package/lib/mol-gl/shader/direct-volume.vert.js +41 -41
  257. package/lib/mol-gl/shader/dof.frag.d.ts +7 -0
  258. package/lib/mol-gl/shader/dof.frag.js +119 -0
  259. package/lib/mol-gl/shader/evaluate-dpoit.frag.js +10 -10
  260. package/lib/mol-gl/shader/evaluate-wboit.frag.js +17 -17
  261. package/lib/mol-gl/shader/fxaa.frag.js +228 -228
  262. package/lib/mol-gl/shader/gaussian-density.frag.js +49 -49
  263. package/lib/mol-gl/shader/gaussian-density.vert.js +27 -27
  264. package/lib/mol-gl/shader/hi-z.frag.js +18 -18
  265. package/lib/mol-gl/shader/histogram-pyramid/reduction.frag.js +58 -58
  266. package/lib/mol-gl/shader/histogram-pyramid/sum.frag.js +19 -19
  267. package/lib/mol-gl/shader/image.frag.js +169 -169
  268. package/lib/mol-gl/shader/image.vert.js +21 -21
  269. package/lib/mol-gl/shader/lines.frag.js +42 -42
  270. package/lib/mol-gl/shader/lines.vert.js +117 -117
  271. package/lib/mol-gl/shader/marching-cubes/active-voxels.frag.js +70 -70
  272. package/lib/mol-gl/shader/marching-cubes/isosurface.frag.js +311 -311
  273. package/lib/mol-gl/shader/marking/edge.frag.js +28 -28
  274. package/lib/mol-gl/shader/marking/overlay.frag.js +26 -26
  275. package/lib/mol-gl/shader/mesh.frag.js +65 -65
  276. package/lib/mol-gl/shader/mesh.vert.js +49 -49
  277. package/lib/mol-gl/shader/outlines.frag.js +95 -95
  278. package/lib/mol-gl/shader/points.frag.js +59 -59
  279. package/lib/mol-gl/shader/points.vert.js +38 -38
  280. package/lib/mol-gl/shader/postprocessing.frag.js +150 -150
  281. package/lib/mol-gl/shader/quad.vert.js +10 -10
  282. package/lib/mol-gl/shader/shadows.frag.js +123 -123
  283. package/lib/mol-gl/shader/smaa/blend.frag.js +56 -56
  284. package/lib/mol-gl/shader/smaa/blend.vert.js +25 -25
  285. package/lib/mol-gl/shader/smaa/edges.frag.js +66 -66
  286. package/lib/mol-gl/shader/smaa/edges.vert.js +26 -26
  287. package/lib/mol-gl/shader/smaa/weights.frag.js +206 -206
  288. package/lib/mol-gl/shader/smaa/weights.vert.js +32 -32
  289. package/lib/mol-gl/shader/spheres.frag.js +148 -148
  290. package/lib/mol-gl/shader/spheres.vert.js +132 -132
  291. package/lib/mol-gl/shader/ssao-blur.frag.js +97 -97
  292. package/lib/mol-gl/shader/ssao.frag.js +211 -211
  293. package/lib/mol-gl/shader/text.frag.js +85 -85
  294. package/lib/mol-gl/shader/text.vert.js +85 -85
  295. package/lib/mol-gl/shader/util/grid3d-template.frag.js +46 -46
  296. package/lib/mol-gl/shader-code.js +15 -15
  297. package/lib/mol-gl/webgl/compat.js +12 -12
  298. package/lib/mol-gl/webgl/context.js +1 -0
  299. package/lib/mol-gl/webgl/timer.d.ts +1 -1
  300. package/lib/mol-gl/webgl/timer.js +8 -1
  301. package/lib/mol-math/linear-algebra/3d/minimize-rmsd.js +2 -1
  302. package/lib/mol-plugin/animation-loop.d.ts +1 -0
  303. package/lib/mol-plugin/behavior/dynamic/volume-streaming/behavior.d.ts +6 -6
  304. package/lib/mol-plugin/behavior/dynamic/volume-streaming/model.d.ts +1 -1
  305. package/lib/mol-plugin/behavior/dynamic/volume-streaming/transformers.d.ts +3 -3
  306. package/lib/mol-plugin/version.js +2 -2
  307. package/lib/mol-plugin-state/animation/built-in/state-snapshots.js +7 -3
  308. package/lib/mol-plugin-ui/skin/base/base.scss +37 -37
  309. package/lib/mol-plugin-ui/skin/base/components/controls-base.scss +333 -333
  310. package/lib/mol-plugin-ui/skin/base/components/controls.scss +445 -445
  311. package/lib/mol-plugin-ui/skin/base/components/help.scss +27 -27
  312. package/lib/mol-plugin-ui/skin/base/components/line-graph.scss +67 -67
  313. package/lib/mol-plugin-ui/skin/base/components/log.scss +100 -100
  314. package/lib/mol-plugin-ui/skin/base/components/misc.scss +663 -663
  315. package/lib/mol-plugin-ui/skin/base/components/sequence.scss +125 -125
  316. package/lib/mol-plugin-ui/skin/base/components/slider.scss +165 -165
  317. package/lib/mol-plugin-ui/skin/base/components/tasks.scss +99 -99
  318. package/lib/mol-plugin-ui/skin/base/components/toast.scss +83 -83
  319. package/lib/mol-plugin-ui/skin/base/components/transformer.scss +163 -163
  320. package/lib/mol-plugin-ui/skin/base/components/viewport.scss +194 -194
  321. package/lib/mol-plugin-ui/skin/base/layout/common.scss +71 -71
  322. package/lib/mol-plugin-ui/skin/base/layout/controls-landscape.scss +89 -89
  323. package/lib/mol-plugin-ui/skin/base/layout/controls-outside.scss +98 -98
  324. package/lib/mol-plugin-ui/skin/base/layout/controls-portrait.scss +108 -108
  325. package/lib/mol-plugin-ui/skin/base/layout.scss +40 -40
  326. package/lib/mol-plugin-ui/skin/base/logo.scss +12 -12
  327. package/lib/mol-plugin-ui/skin/base/normalize.scss +209 -209
  328. package/lib/mol-plugin-ui/skin/base/ui.scss +40 -40
  329. package/lib/mol-plugin-ui/skin/base/variables.scss +88 -88
  330. package/lib/mol-plugin-ui/skin/blue.scss +1 -1
  331. package/lib/mol-plugin-ui/skin/colors/blue.scss +23 -23
  332. package/lib/mol-plugin-ui/skin/colors/dark.scss +23 -23
  333. package/lib/mol-plugin-ui/skin/colors/light.scss +29 -29
  334. package/lib/mol-plugin-ui/skin/dark.scss +1 -1
  335. package/lib/mol-plugin-ui/skin/light.scss +1 -1
  336. package/lib/mol-plugin-ui/viewport/simple-settings.js +3 -0
  337. package/lib/servers/common/swagger-ui/indexTemplate.js +66 -66
  338. package/lib/servers/volume/config.js +5 -5
  339. package/package.json +196 -195
@@ -1,315 +1,315 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isosurface_frag = void 0;
4
- exports.isosurface_frag = `
5
- precision highp float;
6
- precision highp int;
7
- precision highp sampler2D;
8
-
9
- #if __VERSION__ == 100
10
- uniform sampler2D tActiveVoxelsPyramid;
11
- #else
12
- precision highp isampler2D;
13
- uniform isampler2D tActiveVoxelsPyramid;
14
- #endif
15
-
16
- uniform sampler2D tActiveVoxelsBase;
17
- uniform sampler2D tVolumeData;
18
- uniform sampler2D tTriIndices;
19
-
20
- uniform float uIsoValue;
21
- uniform float uLevels;
22
- uniform float uSize;
23
- uniform float uCount;
24
- uniform bool uInvert;
25
-
26
- uniform vec3 uGridDim;
27
- uniform vec3 uGridTexDim;
28
- uniform mat4 uGridTransform;
29
-
30
- // scale to volume data coord
31
- uniform vec2 uScale;
32
-
33
- #include common
34
-
35
- // cube corners (excluding origin)
36
- const vec3 c1 = vec3(1., 0., 0.);
37
- const vec3 c2 = vec3(1., 1., 0.);
38
- const vec3 c3 = vec3(0., 1., 0.);
39
- const vec3 c4 = vec3(0., 0., 1.);
40
- const vec3 c5 = vec3(1., 0., 1.);
41
- const vec3 c6 = vec3(1., 1., 1.);
42
- const vec3 c7 = vec3(0., 1., 1.);
43
-
44
- vec3 index3dFrom2d(vec2 coord) {
45
- vec2 gridTexPos = coord * uGridTexDim.xy;
46
- vec2 columnRow = ivec2Div(gridTexPos, uGridDim.xy);
47
- vec2 posXY = gridTexPos - columnRow * uGridDim.xy;
48
- float posZ = columnRow.y * intDiv(uGridTexDim.x, uGridDim.x) + columnRow.x;
49
- return vec3(posXY, posZ);
50
- }
51
-
52
- vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
53
- float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice
54
- float column = intDiv(intMod(zSlice * gridDim.x, texDim.x), gridDim.x);
55
- float row = intDiv(zSlice * gridDim.x, texDim.x);
56
- vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / (texDim / uScale);
57
- return texture2D(tex, coord + 0.5 / (texDim / uScale));
58
- }
59
-
60
- vec4 voxel(vec3 pos) {
61
- pos = min(max(vec3(0.0), pos), uGridDim - vec3(1.0));
62
- return texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
63
- }
64
-
65
- vec4 voxelPadded(vec3 pos) {
66
- pos = min(max(vec3(0.0), pos), uGridDim - vec3(vec2(2.0), 1.0)); // remove xy padding
67
- return texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
68
- }
69
-
70
- int idot2(const in ivec2 a, const in ivec2 b) {
71
- return a.x * b.x + a.y * b.y;
72
- }
73
-
74
- int idot4(const in ivec4 a, const in ivec4 b) {
75
- return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
76
- }
77
-
78
- #if __VERSION__ == 100
79
- int pyramidVoxel(vec2 pos) {
80
- return int(unpackRGBToInt(texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).rgb));
81
- }
82
- #else
83
- int pyramidVoxel(vec2 pos) {
84
- return texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).r;
85
- }
86
- #endif
87
-
88
- vec4 baseVoxel(vec2 pos) {
89
- return texture2D(tActiveVoxelsBase, pos / uSize);
90
- }
91
-
92
- vec4 getGroup(const in vec3 p) {
93
- vec3 gridDim = uGridDim - vec3(1.0, 1.0, 0.0); // remove xy padding
94
- // note that we swap x and z because the texture is flipped around y
95
- #if defined(dAxisOrder_012)
96
- float group = p.z + p.y * gridDim.z + p.x * gridDim.z * gridDim.y; // 210
97
- #elif defined(dAxisOrder_021)
98
- float group = p.y + p.z * gridDim.y + p.x * gridDim.y * gridDim.z; // 120
99
- #elif defined(dAxisOrder_102)
100
- float group = p.z + p.x * gridDim.z + p.y * gridDim.z * gridDim.x; // 201
101
- #elif defined(dAxisOrder_120)
102
- float group = p.x + p.z * gridDim.x + p.y * gridDim.x * gridDim.z; // 021
103
- #elif defined(dAxisOrder_201)
104
- float group = p.y + p.x * gridDim.y + p.z * gridDim.y * gridDim.x; // 102
105
- #elif defined(dAxisOrder_210)
106
- float group = p.x + p.y * gridDim.x + p.z * gridDim.x * gridDim.y; // 012
107
- #endif
108
- return vec4(group > 16777215.5 ? vec3(1.0) : packIntToRGB(group), 1.0);
109
- }
110
-
111
- void main(void) {
112
- // get 1D index
113
- int vI = int(gl_FragCoord.x) + int(gl_FragCoord.y) * int(uSize);
114
-
115
- // ignore 1D indices outside of the grid
116
- if(vI >= int(uCount)) discard;
117
-
118
- ivec2 offset = ivec2(int(uSize) - 2, 0);
119
-
120
- int start = 0;
121
- ivec4 starts = ivec4(0);
122
- ivec4 ends = ivec4(0);
123
- int diff = 2;
124
- ivec4 m = ivec4(0);
125
- ivec2 position = ivec2(0);
126
- ivec4 vI4 = ivec4(vI);
127
-
128
- ivec2 relativePosition = ivec2(0);
129
- int end = 0;
130
- ivec2 pos1 = ivec2(0);
131
- ivec2 pos2 = ivec2(0);
132
- ivec2 pos3 = ivec2(0);
133
- ivec2 pos4 = ivec2(0);
134
- ivec3 vI3 = ivec3(vI);
135
- ivec3 mask = ivec3(0);
136
-
137
- // traverse the different levels of the pyramid
138
- for(int i = 1; i < 14; i++) {
139
- if(float(i) >= uLevels) break;
140
-
141
- offset.x -= diff;
142
- diff *= 2;
143
- relativePosition = position + offset;
144
-
145
- end = start + pyramidVoxel(vec2(relativePosition));
146
- pos1 = ivec2(relativePosition);
147
- starts.x = start;
148
- ends.x = end;
149
- pos2 = ivec2(relativePosition + ivec2(1, 0));
150
- starts.y = ends.x;
151
- ends.y = ends.x + pyramidVoxel(vec2(pos2));
152
- pos3 = relativePosition + ivec2(0, 1);
153
- starts.z = ends.y;
154
- ends.z = ends.y + pyramidVoxel(vec2(pos3));
155
- pos4 = relativePosition + ivec2(1, 1);
156
- starts.w = ends.z;
157
- mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb));
158
- m = ivec4(mask, 1 - int(any(bvec3(mask))));
159
-
160
- relativePosition = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4;
161
- start = idot4(m, starts);
162
- position = 2 * (relativePosition - offset);
163
- }
164
-
165
- end = start + int(baseVoxel(vec2(position)).r * 255.0);
166
- pos1 = position;
167
- starts.x = start;
168
- ends.x = end;
169
- pos2 = position + ivec2(1, 0);
170
- starts.y = ends.x;
171
- ends.y = ends.x + int(baseVoxel(vec2(pos2)).r * 255.0);
172
- pos3 = position + ivec2(0, 1);
173
- starts.z = ends.y;
174
- ends.z = ends.y + int(baseVoxel(vec2(pos3)).r * 255.0);
175
- pos4 = position + ivec2(1, 1);
176
- starts.w = ends.z;
177
- mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb));
178
- m = ivec4(mask, 1 - int(any(bvec3(mask))));
179
- position = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4;
180
-
181
- vec2 coord2d = (vec2(position) / uSize) / uScale;
182
- vec3 coord3d = floor(index3dFrom2d(coord2d) + 0.5);
183
-
184
- float edgeIndex = floor(baseVoxel(vec2(position)).a * 255.0 + 0.5);
185
-
186
- // current vertex for the up to 15 MC cases
187
- int currentVertex = vI - idot4(m, starts);
188
-
189
- // ensure winding-order is the same for negative and positive iso-levels
190
- if (uInvert) {
191
- int v = imod(currentVertex + 1, 3);
192
- if (v == 1) currentVertex += 2;
193
- else if (v == 0) currentVertex -= 2;
194
- }
195
-
196
- // get index into triIndices table
197
- int mcIndex = 16 * int(edgeIndex) + currentVertex;
198
- vec4 mcData = texture2D(tTriIndices, vec2(imod(mcIndex, 64), mcIndex / 64) / 64.);
199
-
200
- // bit mask to avoid conditionals (see comment below) for getting MC case corner
201
- vec4 m0 = vec4(floor(mcData.a * 255.0 + 0.5));
202
-
203
- // get edge value masks
204
- vec4 m1 = vec4(equal(m0, vec4(0., 1., 2., 3.)));
205
- vec4 m2 = vec4(equal(m0, vec4(4., 5., 6., 7.)));
206
- vec4 m3 = vec4(equal(m0, vec4(8., 9., 10., 11.)));
207
-
208
- // apply bit masks
209
- vec3 b0 = coord3d +
210
- m1.y * c1 +
211
- m1.z * c2 +
212
- m1.w * c3 +
213
- m2.x * c4 +
214
- m2.y * c5 +
215
- m2.z * c6 +
216
- m2.w * c7 +
217
- m3.y * c1 +
218
- m3.z * c2 +
219
- m3.w * c3;
220
- vec3 b1 = coord3d +
221
- m1.x * c1 +
222
- m1.y * c2 +
223
- m1.z * c3 +
224
- m2.x * c5 +
225
- m2.y * c6 +
226
- m2.z * c7 +
227
- m2.w * c4 +
228
- m3.x * c4 +
229
- m3.y * c5 +
230
- m3.z * c6 +
231
- m3.w * c7;
232
-
233
- // the conditionals that are avoided by above bitmasks
234
- // vec3 b0 = coord3d;
235
- // vec3 b1 = coord3d;
236
- // if (mcIndex == 0.0) {
237
- // b1 += c1;
238
- // } else if (mcIndex == 1.0) {
239
- // b0 += c1; b1 += c2;
240
- // } else if (mcIndex == 2.0) {
241
- // b0 += c2; b1 += c3;
242
- // } else if (mcIndex == 3.0) {
243
- // b0 += c3;
244
- // } else if (mcIndex == 4.0) {
245
- // b0 += c4; b1 += c5;
246
- // } else if (mcIndex == 5.0) {
247
- // b0 += c5; b1 += c6;
248
- // } else if (mcIndex == 6.0) {
249
- // b0 += c6; b1 += c7;
250
- // } else if (mcIndex == 7.0) {
251
- // b0 += c7; b1 += c4;
252
- // } else if (mcIndex == 8.0) {
253
- // b1 += c4;
254
- // } else if (mcIndex == 9.0) {
255
- // b0 += c1; b1 += c5;
256
- // } else if (mcIndex == 10.0) {
257
- // b0 += c2; b1 += c6;
258
- // } else if (mcIndex == 11.0) {
259
- // b0 += c3; b1 += c7;
260
- // }
261
- // b0 = floor(b0 + 0.5);
262
- // b1 = floor(b1 + 0.5);
263
-
264
- vec4 d0 = voxel(b0);
265
- vec4 d1 = voxel(b1);
266
-
267
- float v0 = d0.a;
268
- float v1 = d1.a;
269
-
270
- float t = (uIsoValue - v0) / (v0 - v1);
271
- gl_FragData[0].xyz = (uGridTransform * vec4(b0 + t * (b0 - b1), 1.0)).xyz;
272
-
273
- // group id
274
- #if __VERSION__ == 100 || defined(dConstantGroup)
275
- // webgl1 does not support 'flat' interpolation (i.e. no interpolation)
276
- // ensure a constant group id per triangle as needed
277
- #ifdef dPackedGroup
278
- gl_FragData[1] = vec4(voxel(coord3d).rgb, 1.0);
279
- #else
280
- gl_FragData[1] = getGroup(coord3d);
281
- #endif
282
- #else
283
- #ifdef dPackedGroup
284
- gl_FragData[1] = vec4(t < 0.5 ? d0.rgb : d1.rgb, 1.0);
285
- #else
286
- gl_FragData[1] = getGroup(t < 0.5 ? b0 : b1);
287
- #endif
288
- #endif
289
-
290
- // normals from gradients
291
- vec3 n0 = -normalize(vec3(
292
- voxelPadded(b0 - c1).a - voxelPadded(b0 + c1).a,
293
- voxelPadded(b0 - c3).a - voxelPadded(b0 + c3).a,
294
- voxelPadded(b0 - c4).a - voxelPadded(b0 + c4).a
295
- ));
296
- vec3 n1 = -normalize(vec3(
297
- voxelPadded(b1 - c1).a - voxelPadded(b1 + c1).a,
298
- voxelPadded(b1 - c3).a - voxelPadded(b1 + c3).a,
299
- voxelPadded(b1 - c4).a - voxelPadded(b1 + c4).a
300
- ));
301
- gl_FragData[2].xyz = -vec3(
302
- n0.x + t * (n0.x - n1.x),
303
- n0.y + t * (n0.y - n1.y),
304
- n0.z + t * (n0.z - n1.z)
305
- );
306
-
307
- // ensure normal-direction is the same for negative and positive iso-levels
308
- if (uInvert) {
309
- gl_FragData[2].xyz *= -1.0;
310
- }
311
-
312
- // apply normal matrix
313
- gl_FragData[2].xyz *= transpose3(inverse3(mat3(uGridTransform)));
314
- }
4
+ exports.isosurface_frag = `
5
+ precision highp float;
6
+ precision highp int;
7
+ precision highp sampler2D;
8
+
9
+ #if __VERSION__ == 100
10
+ uniform sampler2D tActiveVoxelsPyramid;
11
+ #else
12
+ precision highp isampler2D;
13
+ uniform isampler2D tActiveVoxelsPyramid;
14
+ #endif
15
+
16
+ uniform sampler2D tActiveVoxelsBase;
17
+ uniform sampler2D tVolumeData;
18
+ uniform sampler2D tTriIndices;
19
+
20
+ uniform float uIsoValue;
21
+ uniform float uLevels;
22
+ uniform float uSize;
23
+ uniform float uCount;
24
+ uniform bool uInvert;
25
+
26
+ uniform vec3 uGridDim;
27
+ uniform vec3 uGridTexDim;
28
+ uniform mat4 uGridTransform;
29
+
30
+ // scale to volume data coord
31
+ uniform vec2 uScale;
32
+
33
+ #include common
34
+
35
+ // cube corners (excluding origin)
36
+ const vec3 c1 = vec3(1., 0., 0.);
37
+ const vec3 c2 = vec3(1., 1., 0.);
38
+ const vec3 c3 = vec3(0., 1., 0.);
39
+ const vec3 c4 = vec3(0., 0., 1.);
40
+ const vec3 c5 = vec3(1., 0., 1.);
41
+ const vec3 c6 = vec3(1., 1., 1.);
42
+ const vec3 c7 = vec3(0., 1., 1.);
43
+
44
+ vec3 index3dFrom2d(vec2 coord) {
45
+ vec2 gridTexPos = coord * uGridTexDim.xy;
46
+ vec2 columnRow = ivec2Div(gridTexPos, uGridDim.xy);
47
+ vec2 posXY = gridTexPos - columnRow * uGridDim.xy;
48
+ float posZ = columnRow.y * intDiv(uGridTexDim.x, uGridDim.x) + columnRow.x;
49
+ return vec3(posXY, posZ);
50
+ }
51
+
52
+ vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
53
+ float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice
54
+ float column = intDiv(intMod(zSlice * gridDim.x, texDim.x), gridDim.x);
55
+ float row = intDiv(zSlice * gridDim.x, texDim.x);
56
+ vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / (texDim / uScale);
57
+ return texture2D(tex, coord + 0.5 / (texDim / uScale));
58
+ }
59
+
60
+ vec4 voxel(vec3 pos) {
61
+ pos = min(max(vec3(0.0), pos), uGridDim - vec3(1.0));
62
+ return texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
63
+ }
64
+
65
+ vec4 voxelPadded(vec3 pos) {
66
+ pos = min(max(vec3(0.0), pos), uGridDim - vec3(vec2(2.0), 1.0)); // remove xy padding
67
+ return texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
68
+ }
69
+
70
+ int idot2(const in ivec2 a, const in ivec2 b) {
71
+ return a.x * b.x + a.y * b.y;
72
+ }
73
+
74
+ int idot4(const in ivec4 a, const in ivec4 b) {
75
+ return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
76
+ }
77
+
78
+ #if __VERSION__ == 100
79
+ int pyramidVoxel(vec2 pos) {
80
+ return int(unpackRGBToInt(texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).rgb));
81
+ }
82
+ #else
83
+ int pyramidVoxel(vec2 pos) {
84
+ return texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).r;
85
+ }
86
+ #endif
87
+
88
+ vec4 baseVoxel(vec2 pos) {
89
+ return texture2D(tActiveVoxelsBase, pos / uSize);
90
+ }
91
+
92
+ vec4 getGroup(const in vec3 p) {
93
+ vec3 gridDim = uGridDim - vec3(1.0, 1.0, 0.0); // remove xy padding
94
+ // note that we swap x and z because the texture is flipped around y
95
+ #if defined(dAxisOrder_012)
96
+ float group = p.z + p.y * gridDim.z + p.x * gridDim.z * gridDim.y; // 210
97
+ #elif defined(dAxisOrder_021)
98
+ float group = p.y + p.z * gridDim.y + p.x * gridDim.y * gridDim.z; // 120
99
+ #elif defined(dAxisOrder_102)
100
+ float group = p.z + p.x * gridDim.z + p.y * gridDim.z * gridDim.x; // 201
101
+ #elif defined(dAxisOrder_120)
102
+ float group = p.x + p.z * gridDim.x + p.y * gridDim.x * gridDim.z; // 021
103
+ #elif defined(dAxisOrder_201)
104
+ float group = p.y + p.x * gridDim.y + p.z * gridDim.y * gridDim.x; // 102
105
+ #elif defined(dAxisOrder_210)
106
+ float group = p.x + p.y * gridDim.x + p.z * gridDim.x * gridDim.y; // 012
107
+ #endif
108
+ return vec4(group > 16777215.5 ? vec3(1.0) : packIntToRGB(group), 1.0);
109
+ }
110
+
111
+ void main(void) {
112
+ // get 1D index
113
+ int vI = int(gl_FragCoord.x) + int(gl_FragCoord.y) * int(uSize);
114
+
115
+ // ignore 1D indices outside of the grid
116
+ if(vI >= int(uCount)) discard;
117
+
118
+ ivec2 offset = ivec2(int(uSize) - 2, 0);
119
+
120
+ int start = 0;
121
+ ivec4 starts = ivec4(0);
122
+ ivec4 ends = ivec4(0);
123
+ int diff = 2;
124
+ ivec4 m = ivec4(0);
125
+ ivec2 position = ivec2(0);
126
+ ivec4 vI4 = ivec4(vI);
127
+
128
+ ivec2 relativePosition = ivec2(0);
129
+ int end = 0;
130
+ ivec2 pos1 = ivec2(0);
131
+ ivec2 pos2 = ivec2(0);
132
+ ivec2 pos3 = ivec2(0);
133
+ ivec2 pos4 = ivec2(0);
134
+ ivec3 vI3 = ivec3(vI);
135
+ ivec3 mask = ivec3(0);
136
+
137
+ // traverse the different levels of the pyramid
138
+ for(int i = 1; i < 14; i++) {
139
+ if(float(i) >= uLevels) break;
140
+
141
+ offset.x -= diff;
142
+ diff *= 2;
143
+ relativePosition = position + offset;
144
+
145
+ end = start + pyramidVoxel(vec2(relativePosition));
146
+ pos1 = ivec2(relativePosition);
147
+ starts.x = start;
148
+ ends.x = end;
149
+ pos2 = ivec2(relativePosition + ivec2(1, 0));
150
+ starts.y = ends.x;
151
+ ends.y = ends.x + pyramidVoxel(vec2(pos2));
152
+ pos3 = relativePosition + ivec2(0, 1);
153
+ starts.z = ends.y;
154
+ ends.z = ends.y + pyramidVoxel(vec2(pos3));
155
+ pos4 = relativePosition + ivec2(1, 1);
156
+ starts.w = ends.z;
157
+ mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb));
158
+ m = ivec4(mask, 1 - int(any(bvec3(mask))));
159
+
160
+ relativePosition = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4;
161
+ start = idot4(m, starts);
162
+ position = 2 * (relativePosition - offset);
163
+ }
164
+
165
+ end = start + int(baseVoxel(vec2(position)).r * 255.0);
166
+ pos1 = position;
167
+ starts.x = start;
168
+ ends.x = end;
169
+ pos2 = position + ivec2(1, 0);
170
+ starts.y = ends.x;
171
+ ends.y = ends.x + int(baseVoxel(vec2(pos2)).r * 255.0);
172
+ pos3 = position + ivec2(0, 1);
173
+ starts.z = ends.y;
174
+ ends.z = ends.y + int(baseVoxel(vec2(pos3)).r * 255.0);
175
+ pos4 = position + ivec2(1, 1);
176
+ starts.w = ends.z;
177
+ mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb));
178
+ m = ivec4(mask, 1 - int(any(bvec3(mask))));
179
+ position = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4;
180
+
181
+ vec2 coord2d = (vec2(position) / uSize) / uScale;
182
+ vec3 coord3d = floor(index3dFrom2d(coord2d) + 0.5);
183
+
184
+ float edgeIndex = floor(baseVoxel(vec2(position)).a * 255.0 + 0.5);
185
+
186
+ // current vertex for the up to 15 MC cases
187
+ int currentVertex = vI - idot4(m, starts);
188
+
189
+ // ensure winding-order is the same for negative and positive iso-levels
190
+ if (uInvert) {
191
+ int v = imod(currentVertex + 1, 3);
192
+ if (v == 1) currentVertex += 2;
193
+ else if (v == 0) currentVertex -= 2;
194
+ }
195
+
196
+ // get index into triIndices table
197
+ int mcIndex = 16 * int(edgeIndex) + currentVertex;
198
+ vec4 mcData = texture2D(tTriIndices, vec2(imod(mcIndex, 64), mcIndex / 64) / 64.);
199
+
200
+ // bit mask to avoid conditionals (see comment below) for getting MC case corner
201
+ vec4 m0 = vec4(floor(mcData.a * 255.0 + 0.5));
202
+
203
+ // get edge value masks
204
+ vec4 m1 = vec4(equal(m0, vec4(0., 1., 2., 3.)));
205
+ vec4 m2 = vec4(equal(m0, vec4(4., 5., 6., 7.)));
206
+ vec4 m3 = vec4(equal(m0, vec4(8., 9., 10., 11.)));
207
+
208
+ // apply bit masks
209
+ vec3 b0 = coord3d +
210
+ m1.y * c1 +
211
+ m1.z * c2 +
212
+ m1.w * c3 +
213
+ m2.x * c4 +
214
+ m2.y * c5 +
215
+ m2.z * c6 +
216
+ m2.w * c7 +
217
+ m3.y * c1 +
218
+ m3.z * c2 +
219
+ m3.w * c3;
220
+ vec3 b1 = coord3d +
221
+ m1.x * c1 +
222
+ m1.y * c2 +
223
+ m1.z * c3 +
224
+ m2.x * c5 +
225
+ m2.y * c6 +
226
+ m2.z * c7 +
227
+ m2.w * c4 +
228
+ m3.x * c4 +
229
+ m3.y * c5 +
230
+ m3.z * c6 +
231
+ m3.w * c7;
232
+
233
+ // the conditionals that are avoided by above bitmasks
234
+ // vec3 b0 = coord3d;
235
+ // vec3 b1 = coord3d;
236
+ // if (mcIndex == 0.0) {
237
+ // b1 += c1;
238
+ // } else if (mcIndex == 1.0) {
239
+ // b0 += c1; b1 += c2;
240
+ // } else if (mcIndex == 2.0) {
241
+ // b0 += c2; b1 += c3;
242
+ // } else if (mcIndex == 3.0) {
243
+ // b0 += c3;
244
+ // } else if (mcIndex == 4.0) {
245
+ // b0 += c4; b1 += c5;
246
+ // } else if (mcIndex == 5.0) {
247
+ // b0 += c5; b1 += c6;
248
+ // } else if (mcIndex == 6.0) {
249
+ // b0 += c6; b1 += c7;
250
+ // } else if (mcIndex == 7.0) {
251
+ // b0 += c7; b1 += c4;
252
+ // } else if (mcIndex == 8.0) {
253
+ // b1 += c4;
254
+ // } else if (mcIndex == 9.0) {
255
+ // b0 += c1; b1 += c5;
256
+ // } else if (mcIndex == 10.0) {
257
+ // b0 += c2; b1 += c6;
258
+ // } else if (mcIndex == 11.0) {
259
+ // b0 += c3; b1 += c7;
260
+ // }
261
+ // b0 = floor(b0 + 0.5);
262
+ // b1 = floor(b1 + 0.5);
263
+
264
+ vec4 d0 = voxel(b0);
265
+ vec4 d1 = voxel(b1);
266
+
267
+ float v0 = d0.a;
268
+ float v1 = d1.a;
269
+
270
+ float t = (uIsoValue - v0) / (v0 - v1);
271
+ gl_FragData[0].xyz = (uGridTransform * vec4(b0 + t * (b0 - b1), 1.0)).xyz;
272
+
273
+ // group id
274
+ #if __VERSION__ == 100 || defined(dConstantGroup)
275
+ // webgl1 does not support 'flat' interpolation (i.e. no interpolation)
276
+ // ensure a constant group id per triangle as needed
277
+ #ifdef dPackedGroup
278
+ gl_FragData[1] = vec4(voxel(coord3d).rgb, 1.0);
279
+ #else
280
+ gl_FragData[1] = getGroup(coord3d);
281
+ #endif
282
+ #else
283
+ #ifdef dPackedGroup
284
+ gl_FragData[1] = vec4(t < 0.5 ? d0.rgb : d1.rgb, 1.0);
285
+ #else
286
+ gl_FragData[1] = getGroup(t < 0.5 ? b0 : b1);
287
+ #endif
288
+ #endif
289
+
290
+ // normals from gradients
291
+ vec3 n0 = -normalize(vec3(
292
+ voxelPadded(b0 - c1).a - voxelPadded(b0 + c1).a,
293
+ voxelPadded(b0 - c3).a - voxelPadded(b0 + c3).a,
294
+ voxelPadded(b0 - c4).a - voxelPadded(b0 + c4).a
295
+ ));
296
+ vec3 n1 = -normalize(vec3(
297
+ voxelPadded(b1 - c1).a - voxelPadded(b1 + c1).a,
298
+ voxelPadded(b1 - c3).a - voxelPadded(b1 + c3).a,
299
+ voxelPadded(b1 - c4).a - voxelPadded(b1 + c4).a
300
+ ));
301
+ gl_FragData[2].xyz = -vec3(
302
+ n0.x + t * (n0.x - n1.x),
303
+ n0.y + t * (n0.y - n1.y),
304
+ n0.z + t * (n0.z - n1.z)
305
+ );
306
+
307
+ // ensure normal-direction is the same for negative and positive iso-levels
308
+ if (uInvert) {
309
+ gl_FragData[2].xyz *= -1.0;
310
+ }
311
+
312
+ // apply normal matrix
313
+ gl_FragData[2].xyz *= transpose3(inverse3(mat3(uGridTransform)));
314
+ }
315
315
  `;