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,312 +1,312 @@
1
- export const isosurface_frag = `
2
- precision highp float;
3
- precision highp int;
4
- precision highp sampler2D;
5
-
6
- #if __VERSION__ == 100
7
- uniform sampler2D tActiveVoxelsPyramid;
8
- #else
9
- precision highp isampler2D;
10
- uniform isampler2D tActiveVoxelsPyramid;
11
- #endif
12
-
13
- uniform sampler2D tActiveVoxelsBase;
14
- uniform sampler2D tVolumeData;
15
- uniform sampler2D tTriIndices;
16
-
17
- uniform float uIsoValue;
18
- uniform float uLevels;
19
- uniform float uSize;
20
- uniform float uCount;
21
- uniform bool uInvert;
22
-
23
- uniform vec3 uGridDim;
24
- uniform vec3 uGridTexDim;
25
- uniform mat4 uGridTransform;
26
-
27
- // scale to volume data coord
28
- uniform vec2 uScale;
29
-
30
- #include common
31
-
32
- // cube corners (excluding origin)
33
- const vec3 c1 = vec3(1., 0., 0.);
34
- const vec3 c2 = vec3(1., 1., 0.);
35
- const vec3 c3 = vec3(0., 1., 0.);
36
- const vec3 c4 = vec3(0., 0., 1.);
37
- const vec3 c5 = vec3(1., 0., 1.);
38
- const vec3 c6 = vec3(1., 1., 1.);
39
- const vec3 c7 = vec3(0., 1., 1.);
40
-
41
- vec3 index3dFrom2d(vec2 coord) {
42
- vec2 gridTexPos = coord * uGridTexDim.xy;
43
- vec2 columnRow = ivec2Div(gridTexPos, uGridDim.xy);
44
- vec2 posXY = gridTexPos - columnRow * uGridDim.xy;
45
- float posZ = columnRow.y * intDiv(uGridTexDim.x, uGridDim.x) + columnRow.x;
46
- return vec3(posXY, posZ);
47
- }
48
-
49
- vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
50
- float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice
51
- float column = intDiv(intMod(zSlice * gridDim.x, texDim.x), gridDim.x);
52
- float row = intDiv(zSlice * gridDim.x, texDim.x);
53
- vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / (texDim / uScale);
54
- return texture2D(tex, coord + 0.5 / (texDim / uScale));
55
- }
56
-
57
- vec4 voxel(vec3 pos) {
58
- pos = min(max(vec3(0.0), pos), uGridDim - vec3(1.0));
59
- return texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
60
- }
61
-
62
- vec4 voxelPadded(vec3 pos) {
63
- pos = min(max(vec3(0.0), pos), uGridDim - vec3(vec2(2.0), 1.0)); // remove xy padding
64
- return texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
65
- }
66
-
67
- int idot2(const in ivec2 a, const in ivec2 b) {
68
- return a.x * b.x + a.y * b.y;
69
- }
70
-
71
- int idot4(const in ivec4 a, const in ivec4 b) {
72
- return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
73
- }
74
-
75
- #if __VERSION__ == 100
76
- int pyramidVoxel(vec2 pos) {
77
- return int(unpackRGBToInt(texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).rgb));
78
- }
79
- #else
80
- int pyramidVoxel(vec2 pos) {
81
- return texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).r;
82
- }
83
- #endif
84
-
85
- vec4 baseVoxel(vec2 pos) {
86
- return texture2D(tActiveVoxelsBase, pos / uSize);
87
- }
88
-
89
- vec4 getGroup(const in vec3 p) {
90
- vec3 gridDim = uGridDim - vec3(1.0, 1.0, 0.0); // remove xy padding
91
- // note that we swap x and z because the texture is flipped around y
92
- #if defined(dAxisOrder_012)
93
- float group = p.z + p.y * gridDim.z + p.x * gridDim.z * gridDim.y; // 210
94
- #elif defined(dAxisOrder_021)
95
- float group = p.y + p.z * gridDim.y + p.x * gridDim.y * gridDim.z; // 120
96
- #elif defined(dAxisOrder_102)
97
- float group = p.z + p.x * gridDim.z + p.y * gridDim.z * gridDim.x; // 201
98
- #elif defined(dAxisOrder_120)
99
- float group = p.x + p.z * gridDim.x + p.y * gridDim.x * gridDim.z; // 021
100
- #elif defined(dAxisOrder_201)
101
- float group = p.y + p.x * gridDim.y + p.z * gridDim.y * gridDim.x; // 102
102
- #elif defined(dAxisOrder_210)
103
- float group = p.x + p.y * gridDim.x + p.z * gridDim.x * gridDim.y; // 012
104
- #endif
105
- return vec4(group > 16777215.5 ? vec3(1.0) : packIntToRGB(group), 1.0);
106
- }
107
-
108
- void main(void) {
109
- // get 1D index
110
- int vI = int(gl_FragCoord.x) + int(gl_FragCoord.y) * int(uSize);
111
-
112
- // ignore 1D indices outside of the grid
113
- if(vI >= int(uCount)) discard;
114
-
115
- ivec2 offset = ivec2(int(uSize) - 2, 0);
116
-
117
- int start = 0;
118
- ivec4 starts = ivec4(0);
119
- ivec4 ends = ivec4(0);
120
- int diff = 2;
121
- ivec4 m = ivec4(0);
122
- ivec2 position = ivec2(0);
123
- ivec4 vI4 = ivec4(vI);
124
-
125
- ivec2 relativePosition = ivec2(0);
126
- int end = 0;
127
- ivec2 pos1 = ivec2(0);
128
- ivec2 pos2 = ivec2(0);
129
- ivec2 pos3 = ivec2(0);
130
- ivec2 pos4 = ivec2(0);
131
- ivec3 vI3 = ivec3(vI);
132
- ivec3 mask = ivec3(0);
133
-
134
- // traverse the different levels of the pyramid
135
- for(int i = 1; i < 14; i++) {
136
- if(float(i) >= uLevels) break;
137
-
138
- offset.x -= diff;
139
- diff *= 2;
140
- relativePosition = position + offset;
141
-
142
- end = start + pyramidVoxel(vec2(relativePosition));
143
- pos1 = ivec2(relativePosition);
144
- starts.x = start;
145
- ends.x = end;
146
- pos2 = ivec2(relativePosition + ivec2(1, 0));
147
- starts.y = ends.x;
148
- ends.y = ends.x + pyramidVoxel(vec2(pos2));
149
- pos3 = relativePosition + ivec2(0, 1);
150
- starts.z = ends.y;
151
- ends.z = ends.y + pyramidVoxel(vec2(pos3));
152
- pos4 = relativePosition + ivec2(1, 1);
153
- starts.w = ends.z;
154
- mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb));
155
- m = ivec4(mask, 1 - int(any(bvec3(mask))));
156
-
157
- relativePosition = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4;
158
- start = idot4(m, starts);
159
- position = 2 * (relativePosition - offset);
160
- }
161
-
162
- end = start + int(baseVoxel(vec2(position)).r * 255.0);
163
- pos1 = position;
164
- starts.x = start;
165
- ends.x = end;
166
- pos2 = position + ivec2(1, 0);
167
- starts.y = ends.x;
168
- ends.y = ends.x + int(baseVoxel(vec2(pos2)).r * 255.0);
169
- pos3 = position + ivec2(0, 1);
170
- starts.z = ends.y;
171
- ends.z = ends.y + int(baseVoxel(vec2(pos3)).r * 255.0);
172
- pos4 = position + ivec2(1, 1);
173
- starts.w = ends.z;
174
- mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb));
175
- m = ivec4(mask, 1 - int(any(bvec3(mask))));
176
- position = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4;
177
-
178
- vec2 coord2d = (vec2(position) / uSize) / uScale;
179
- vec3 coord3d = floor(index3dFrom2d(coord2d) + 0.5);
180
-
181
- float edgeIndex = floor(baseVoxel(vec2(position)).a * 255.0 + 0.5);
182
-
183
- // current vertex for the up to 15 MC cases
184
- int currentVertex = vI - idot4(m, starts);
185
-
186
- // ensure winding-order is the same for negative and positive iso-levels
187
- if (uInvert) {
188
- int v = imod(currentVertex + 1, 3);
189
- if (v == 1) currentVertex += 2;
190
- else if (v == 0) currentVertex -= 2;
191
- }
192
-
193
- // get index into triIndices table
194
- int mcIndex = 16 * int(edgeIndex) + currentVertex;
195
- vec4 mcData = texture2D(tTriIndices, vec2(imod(mcIndex, 64), mcIndex / 64) / 64.);
196
-
197
- // bit mask to avoid conditionals (see comment below) for getting MC case corner
198
- vec4 m0 = vec4(floor(mcData.a * 255.0 + 0.5));
199
-
200
- // get edge value masks
201
- vec4 m1 = vec4(equal(m0, vec4(0., 1., 2., 3.)));
202
- vec4 m2 = vec4(equal(m0, vec4(4., 5., 6., 7.)));
203
- vec4 m3 = vec4(equal(m0, vec4(8., 9., 10., 11.)));
204
-
205
- // apply bit masks
206
- vec3 b0 = coord3d +
207
- m1.y * c1 +
208
- m1.z * c2 +
209
- m1.w * c3 +
210
- m2.x * c4 +
211
- m2.y * c5 +
212
- m2.z * c6 +
213
- m2.w * c7 +
214
- m3.y * c1 +
215
- m3.z * c2 +
216
- m3.w * c3;
217
- vec3 b1 = coord3d +
218
- m1.x * c1 +
219
- m1.y * c2 +
220
- m1.z * c3 +
221
- m2.x * c5 +
222
- m2.y * c6 +
223
- m2.z * c7 +
224
- m2.w * c4 +
225
- m3.x * c4 +
226
- m3.y * c5 +
227
- m3.z * c6 +
228
- m3.w * c7;
229
-
230
- // the conditionals that are avoided by above bitmasks
231
- // vec3 b0 = coord3d;
232
- // vec3 b1 = coord3d;
233
- // if (mcIndex == 0.0) {
234
- // b1 += c1;
235
- // } else if (mcIndex == 1.0) {
236
- // b0 += c1; b1 += c2;
237
- // } else if (mcIndex == 2.0) {
238
- // b0 += c2; b1 += c3;
239
- // } else if (mcIndex == 3.0) {
240
- // b0 += c3;
241
- // } else if (mcIndex == 4.0) {
242
- // b0 += c4; b1 += c5;
243
- // } else if (mcIndex == 5.0) {
244
- // b0 += c5; b1 += c6;
245
- // } else if (mcIndex == 6.0) {
246
- // b0 += c6; b1 += c7;
247
- // } else if (mcIndex == 7.0) {
248
- // b0 += c7; b1 += c4;
249
- // } else if (mcIndex == 8.0) {
250
- // b1 += c4;
251
- // } else if (mcIndex == 9.0) {
252
- // b0 += c1; b1 += c5;
253
- // } else if (mcIndex == 10.0) {
254
- // b0 += c2; b1 += c6;
255
- // } else if (mcIndex == 11.0) {
256
- // b0 += c3; b1 += c7;
257
- // }
258
- // b0 = floor(b0 + 0.5);
259
- // b1 = floor(b1 + 0.5);
260
-
261
- vec4 d0 = voxel(b0);
262
- vec4 d1 = voxel(b1);
263
-
264
- float v0 = d0.a;
265
- float v1 = d1.a;
266
-
267
- float t = (uIsoValue - v0) / (v0 - v1);
268
- gl_FragData[0].xyz = (uGridTransform * vec4(b0 + t * (b0 - b1), 1.0)).xyz;
269
-
270
- // group id
271
- #if __VERSION__ == 100 || defined(dConstantGroup)
272
- // webgl1 does not support 'flat' interpolation (i.e. no interpolation)
273
- // ensure a constant group id per triangle as needed
274
- #ifdef dPackedGroup
275
- gl_FragData[1] = vec4(voxel(coord3d).rgb, 1.0);
276
- #else
277
- gl_FragData[1] = getGroup(coord3d);
278
- #endif
279
- #else
280
- #ifdef dPackedGroup
281
- gl_FragData[1] = vec4(t < 0.5 ? d0.rgb : d1.rgb, 1.0);
282
- #else
283
- gl_FragData[1] = getGroup(t < 0.5 ? b0 : b1);
284
- #endif
285
- #endif
286
-
287
- // normals from gradients
288
- vec3 n0 = -normalize(vec3(
289
- voxelPadded(b0 - c1).a - voxelPadded(b0 + c1).a,
290
- voxelPadded(b0 - c3).a - voxelPadded(b0 + c3).a,
291
- voxelPadded(b0 - c4).a - voxelPadded(b0 + c4).a
292
- ));
293
- vec3 n1 = -normalize(vec3(
294
- voxelPadded(b1 - c1).a - voxelPadded(b1 + c1).a,
295
- voxelPadded(b1 - c3).a - voxelPadded(b1 + c3).a,
296
- voxelPadded(b1 - c4).a - voxelPadded(b1 + c4).a
297
- ));
298
- gl_FragData[2].xyz = -vec3(
299
- n0.x + t * (n0.x - n1.x),
300
- n0.y + t * (n0.y - n1.y),
301
- n0.z + t * (n0.z - n1.z)
302
- );
303
-
304
- // ensure normal-direction is the same for negative and positive iso-levels
305
- if (uInvert) {
306
- gl_FragData[2].xyz *= -1.0;
307
- }
308
-
309
- // apply normal matrix
310
- gl_FragData[2].xyz *= transpose3(inverse3(mat3(uGridTransform)));
311
- }
1
+ export const isosurface_frag = `
2
+ precision highp float;
3
+ precision highp int;
4
+ precision highp sampler2D;
5
+
6
+ #if __VERSION__ == 100
7
+ uniform sampler2D tActiveVoxelsPyramid;
8
+ #else
9
+ precision highp isampler2D;
10
+ uniform isampler2D tActiveVoxelsPyramid;
11
+ #endif
12
+
13
+ uniform sampler2D tActiveVoxelsBase;
14
+ uniform sampler2D tVolumeData;
15
+ uniform sampler2D tTriIndices;
16
+
17
+ uniform float uIsoValue;
18
+ uniform float uLevels;
19
+ uniform float uSize;
20
+ uniform float uCount;
21
+ uniform bool uInvert;
22
+
23
+ uniform vec3 uGridDim;
24
+ uniform vec3 uGridTexDim;
25
+ uniform mat4 uGridTransform;
26
+
27
+ // scale to volume data coord
28
+ uniform vec2 uScale;
29
+
30
+ #include common
31
+
32
+ // cube corners (excluding origin)
33
+ const vec3 c1 = vec3(1., 0., 0.);
34
+ const vec3 c2 = vec3(1., 1., 0.);
35
+ const vec3 c3 = vec3(0., 1., 0.);
36
+ const vec3 c4 = vec3(0., 0., 1.);
37
+ const vec3 c5 = vec3(1., 0., 1.);
38
+ const vec3 c6 = vec3(1., 1., 1.);
39
+ const vec3 c7 = vec3(0., 1., 1.);
40
+
41
+ vec3 index3dFrom2d(vec2 coord) {
42
+ vec2 gridTexPos = coord * uGridTexDim.xy;
43
+ vec2 columnRow = ivec2Div(gridTexPos, uGridDim.xy);
44
+ vec2 posXY = gridTexPos - columnRow * uGridDim.xy;
45
+ float posZ = columnRow.y * intDiv(uGridTexDim.x, uGridDim.x) + columnRow.x;
46
+ return vec3(posXY, posZ);
47
+ }
48
+
49
+ vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
50
+ float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice
51
+ float column = intDiv(intMod(zSlice * gridDim.x, texDim.x), gridDim.x);
52
+ float row = intDiv(zSlice * gridDim.x, texDim.x);
53
+ vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / (texDim / uScale);
54
+ return texture2D(tex, coord + 0.5 / (texDim / uScale));
55
+ }
56
+
57
+ vec4 voxel(vec3 pos) {
58
+ pos = min(max(vec3(0.0), pos), uGridDim - vec3(1.0));
59
+ return texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
60
+ }
61
+
62
+ vec4 voxelPadded(vec3 pos) {
63
+ pos = min(max(vec3(0.0), pos), uGridDim - vec3(vec2(2.0), 1.0)); // remove xy padding
64
+ return texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
65
+ }
66
+
67
+ int idot2(const in ivec2 a, const in ivec2 b) {
68
+ return a.x * b.x + a.y * b.y;
69
+ }
70
+
71
+ int idot4(const in ivec4 a, const in ivec4 b) {
72
+ return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
73
+ }
74
+
75
+ #if __VERSION__ == 100
76
+ int pyramidVoxel(vec2 pos) {
77
+ return int(unpackRGBToInt(texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).rgb));
78
+ }
79
+ #else
80
+ int pyramidVoxel(vec2 pos) {
81
+ return texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).r;
82
+ }
83
+ #endif
84
+
85
+ vec4 baseVoxel(vec2 pos) {
86
+ return texture2D(tActiveVoxelsBase, pos / uSize);
87
+ }
88
+
89
+ vec4 getGroup(const in vec3 p) {
90
+ vec3 gridDim = uGridDim - vec3(1.0, 1.0, 0.0); // remove xy padding
91
+ // note that we swap x and z because the texture is flipped around y
92
+ #if defined(dAxisOrder_012)
93
+ float group = p.z + p.y * gridDim.z + p.x * gridDim.z * gridDim.y; // 210
94
+ #elif defined(dAxisOrder_021)
95
+ float group = p.y + p.z * gridDim.y + p.x * gridDim.y * gridDim.z; // 120
96
+ #elif defined(dAxisOrder_102)
97
+ float group = p.z + p.x * gridDim.z + p.y * gridDim.z * gridDim.x; // 201
98
+ #elif defined(dAxisOrder_120)
99
+ float group = p.x + p.z * gridDim.x + p.y * gridDim.x * gridDim.z; // 021
100
+ #elif defined(dAxisOrder_201)
101
+ float group = p.y + p.x * gridDim.y + p.z * gridDim.y * gridDim.x; // 102
102
+ #elif defined(dAxisOrder_210)
103
+ float group = p.x + p.y * gridDim.x + p.z * gridDim.x * gridDim.y; // 012
104
+ #endif
105
+ return vec4(group > 16777215.5 ? vec3(1.0) : packIntToRGB(group), 1.0);
106
+ }
107
+
108
+ void main(void) {
109
+ // get 1D index
110
+ int vI = int(gl_FragCoord.x) + int(gl_FragCoord.y) * int(uSize);
111
+
112
+ // ignore 1D indices outside of the grid
113
+ if(vI >= int(uCount)) discard;
114
+
115
+ ivec2 offset = ivec2(int(uSize) - 2, 0);
116
+
117
+ int start = 0;
118
+ ivec4 starts = ivec4(0);
119
+ ivec4 ends = ivec4(0);
120
+ int diff = 2;
121
+ ivec4 m = ivec4(0);
122
+ ivec2 position = ivec2(0);
123
+ ivec4 vI4 = ivec4(vI);
124
+
125
+ ivec2 relativePosition = ivec2(0);
126
+ int end = 0;
127
+ ivec2 pos1 = ivec2(0);
128
+ ivec2 pos2 = ivec2(0);
129
+ ivec2 pos3 = ivec2(0);
130
+ ivec2 pos4 = ivec2(0);
131
+ ivec3 vI3 = ivec3(vI);
132
+ ivec3 mask = ivec3(0);
133
+
134
+ // traverse the different levels of the pyramid
135
+ for(int i = 1; i < 14; i++) {
136
+ if(float(i) >= uLevels) break;
137
+
138
+ offset.x -= diff;
139
+ diff *= 2;
140
+ relativePosition = position + offset;
141
+
142
+ end = start + pyramidVoxel(vec2(relativePosition));
143
+ pos1 = ivec2(relativePosition);
144
+ starts.x = start;
145
+ ends.x = end;
146
+ pos2 = ivec2(relativePosition + ivec2(1, 0));
147
+ starts.y = ends.x;
148
+ ends.y = ends.x + pyramidVoxel(vec2(pos2));
149
+ pos3 = relativePosition + ivec2(0, 1);
150
+ starts.z = ends.y;
151
+ ends.z = ends.y + pyramidVoxel(vec2(pos3));
152
+ pos4 = relativePosition + ivec2(1, 1);
153
+ starts.w = ends.z;
154
+ mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb));
155
+ m = ivec4(mask, 1 - int(any(bvec3(mask))));
156
+
157
+ relativePosition = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4;
158
+ start = idot4(m, starts);
159
+ position = 2 * (relativePosition - offset);
160
+ }
161
+
162
+ end = start + int(baseVoxel(vec2(position)).r * 255.0);
163
+ pos1 = position;
164
+ starts.x = start;
165
+ ends.x = end;
166
+ pos2 = position + ivec2(1, 0);
167
+ starts.y = ends.x;
168
+ ends.y = ends.x + int(baseVoxel(vec2(pos2)).r * 255.0);
169
+ pos3 = position + ivec2(0, 1);
170
+ starts.z = ends.y;
171
+ ends.z = ends.y + int(baseVoxel(vec2(pos3)).r * 255.0);
172
+ pos4 = position + ivec2(1, 1);
173
+ starts.w = ends.z;
174
+ mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb));
175
+ m = ivec4(mask, 1 - int(any(bvec3(mask))));
176
+ position = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4;
177
+
178
+ vec2 coord2d = (vec2(position) / uSize) / uScale;
179
+ vec3 coord3d = floor(index3dFrom2d(coord2d) + 0.5);
180
+
181
+ float edgeIndex = floor(baseVoxel(vec2(position)).a * 255.0 + 0.5);
182
+
183
+ // current vertex for the up to 15 MC cases
184
+ int currentVertex = vI - idot4(m, starts);
185
+
186
+ // ensure winding-order is the same for negative and positive iso-levels
187
+ if (uInvert) {
188
+ int v = imod(currentVertex + 1, 3);
189
+ if (v == 1) currentVertex += 2;
190
+ else if (v == 0) currentVertex -= 2;
191
+ }
192
+
193
+ // get index into triIndices table
194
+ int mcIndex = 16 * int(edgeIndex) + currentVertex;
195
+ vec4 mcData = texture2D(tTriIndices, vec2(imod(mcIndex, 64), mcIndex / 64) / 64.);
196
+
197
+ // bit mask to avoid conditionals (see comment below) for getting MC case corner
198
+ vec4 m0 = vec4(floor(mcData.a * 255.0 + 0.5));
199
+
200
+ // get edge value masks
201
+ vec4 m1 = vec4(equal(m0, vec4(0., 1., 2., 3.)));
202
+ vec4 m2 = vec4(equal(m0, vec4(4., 5., 6., 7.)));
203
+ vec4 m3 = vec4(equal(m0, vec4(8., 9., 10., 11.)));
204
+
205
+ // apply bit masks
206
+ vec3 b0 = coord3d +
207
+ m1.y * c1 +
208
+ m1.z * c2 +
209
+ m1.w * c3 +
210
+ m2.x * c4 +
211
+ m2.y * c5 +
212
+ m2.z * c6 +
213
+ m2.w * c7 +
214
+ m3.y * c1 +
215
+ m3.z * c2 +
216
+ m3.w * c3;
217
+ vec3 b1 = coord3d +
218
+ m1.x * c1 +
219
+ m1.y * c2 +
220
+ m1.z * c3 +
221
+ m2.x * c5 +
222
+ m2.y * c6 +
223
+ m2.z * c7 +
224
+ m2.w * c4 +
225
+ m3.x * c4 +
226
+ m3.y * c5 +
227
+ m3.z * c6 +
228
+ m3.w * c7;
229
+
230
+ // the conditionals that are avoided by above bitmasks
231
+ // vec3 b0 = coord3d;
232
+ // vec3 b1 = coord3d;
233
+ // if (mcIndex == 0.0) {
234
+ // b1 += c1;
235
+ // } else if (mcIndex == 1.0) {
236
+ // b0 += c1; b1 += c2;
237
+ // } else if (mcIndex == 2.0) {
238
+ // b0 += c2; b1 += c3;
239
+ // } else if (mcIndex == 3.0) {
240
+ // b0 += c3;
241
+ // } else if (mcIndex == 4.0) {
242
+ // b0 += c4; b1 += c5;
243
+ // } else if (mcIndex == 5.0) {
244
+ // b0 += c5; b1 += c6;
245
+ // } else if (mcIndex == 6.0) {
246
+ // b0 += c6; b1 += c7;
247
+ // } else if (mcIndex == 7.0) {
248
+ // b0 += c7; b1 += c4;
249
+ // } else if (mcIndex == 8.0) {
250
+ // b1 += c4;
251
+ // } else if (mcIndex == 9.0) {
252
+ // b0 += c1; b1 += c5;
253
+ // } else if (mcIndex == 10.0) {
254
+ // b0 += c2; b1 += c6;
255
+ // } else if (mcIndex == 11.0) {
256
+ // b0 += c3; b1 += c7;
257
+ // }
258
+ // b0 = floor(b0 + 0.5);
259
+ // b1 = floor(b1 + 0.5);
260
+
261
+ vec4 d0 = voxel(b0);
262
+ vec4 d1 = voxel(b1);
263
+
264
+ float v0 = d0.a;
265
+ float v1 = d1.a;
266
+
267
+ float t = (uIsoValue - v0) / (v0 - v1);
268
+ gl_FragData[0].xyz = (uGridTransform * vec4(b0 + t * (b0 - b1), 1.0)).xyz;
269
+
270
+ // group id
271
+ #if __VERSION__ == 100 || defined(dConstantGroup)
272
+ // webgl1 does not support 'flat' interpolation (i.e. no interpolation)
273
+ // ensure a constant group id per triangle as needed
274
+ #ifdef dPackedGroup
275
+ gl_FragData[1] = vec4(voxel(coord3d).rgb, 1.0);
276
+ #else
277
+ gl_FragData[1] = getGroup(coord3d);
278
+ #endif
279
+ #else
280
+ #ifdef dPackedGroup
281
+ gl_FragData[1] = vec4(t < 0.5 ? d0.rgb : d1.rgb, 1.0);
282
+ #else
283
+ gl_FragData[1] = getGroup(t < 0.5 ? b0 : b1);
284
+ #endif
285
+ #endif
286
+
287
+ // normals from gradients
288
+ vec3 n0 = -normalize(vec3(
289
+ voxelPadded(b0 - c1).a - voxelPadded(b0 + c1).a,
290
+ voxelPadded(b0 - c3).a - voxelPadded(b0 + c3).a,
291
+ voxelPadded(b0 - c4).a - voxelPadded(b0 + c4).a
292
+ ));
293
+ vec3 n1 = -normalize(vec3(
294
+ voxelPadded(b1 - c1).a - voxelPadded(b1 + c1).a,
295
+ voxelPadded(b1 - c3).a - voxelPadded(b1 + c3).a,
296
+ voxelPadded(b1 - c4).a - voxelPadded(b1 + c4).a
297
+ ));
298
+ gl_FragData[2].xyz = -vec3(
299
+ n0.x + t * (n0.x - n1.x),
300
+ n0.y + t * (n0.y - n1.y),
301
+ n0.z + t * (n0.z - n1.z)
302
+ );
303
+
304
+ // ensure normal-direction is the same for negative and positive iso-levels
305
+ if (uInvert) {
306
+ gl_FragData[2].xyz *= -1.0;
307
+ }
308
+
309
+ // apply normal matrix
310
+ gl_FragData[2].xyz *= transpose3(inverse3(mat3(uGridTransform)));
311
+ }
312
312
  `;