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.
- package/LICENSE +20 -20
- package/README.md +197 -197
- package/build/viewer/embedded.html +52 -52
- package/build/viewer/index.html +129 -129
- package/build/viewer/molstar.js +1 -1
- package/build/viewer/molstar.js.LICENSE.txt +9 -0
- package/lib/apps/docking-viewer/index.html +36 -36
- package/lib/apps/mesoscale-explorer/index.html +100 -100
- package/lib/apps/mesoscale-explorer/style.scss +33 -33
- package/lib/apps/viewer/app.d.ts +2 -1
- package/lib/apps/viewer/app.js +2 -1
- package/lib/apps/viewer/embedded.html +52 -52
- package/lib/apps/viewer/index.html +129 -129
- package/lib/cli/chem-comp-dict/create-ions.js +9 -9
- package/lib/cli/chem-comp-dict/create-saccharides.js +9 -9
- package/lib/cli/cifschema/util/generate.js +12 -12
- package/lib/cli/lipid-params/index.js +9 -9
- package/lib/commonjs/apps/viewer/app.d.ts +2 -1
- package/lib/commonjs/apps/viewer/app.js +1 -0
- package/lib/commonjs/cli/chem-comp-dict/create-ions.js +9 -9
- package/lib/commonjs/cli/chem-comp-dict/create-saccharides.js +9 -9
- package/lib/commonjs/cli/cifschema/util/generate.js +12 -12
- package/lib/commonjs/cli/lipid-params/index.js +9 -9
- package/lib/commonjs/examples/alpha-orbitals/example-data.js +160 -160
- package/lib/commonjs/extensions/alpha-orbitals/gpu/shader.frag.js +136 -136
- package/lib/commonjs/extensions/assembly-symmetry/prop.js +24 -24
- package/lib/commonjs/extensions/dnatco/confal-pyramids/behavior.js +5 -5
- package/lib/commonjs/extensions/dnatco/ntc-tube/behavior.js +5 -5
- package/lib/commonjs/extensions/geo-export/usdz-exporter.js +41 -41
- package/lib/commonjs/extensions/meshes/mesh-extension.d.ts +1 -0
- package/lib/commonjs/extensions/mp4-export/encoder.js +1 -1
- package/lib/commonjs/extensions/mvs/components/annotation-label/representation.d.ts +0 -2
- package/lib/commonjs/extensions/mvs/components/custom-label/representation.d.ts +2 -2
- package/lib/commonjs/extensions/mvs/tree/mvs/mvs-builder.d.ts +8 -2
- package/lib/commonjs/extensions/sb-ncbr/index.d.ts +8 -0
- package/lib/commonjs/extensions/sb-ncbr/index.js +14 -1
- package/lib/commonjs/extensions/sb-ncbr/tunnels/actions.d.ts +20 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/actions.js +89 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/algorithm.d.ts +26 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/algorithm.js +474 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/behavior.d.ts +40 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/behavior.js +96 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/data-model.d.ts +146 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/data-model.js +28 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/examples.d.ts +12 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/examples.js +54 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/props.d.ts +19 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/props.js +26 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/representation.d.ts +29 -0
- package/lib/commonjs/extensions/sb-ncbr/tunnels/representation.js +99 -0
- package/lib/commonjs/mol-canvas3d/canvas3d.d.ts +17 -0
- package/lib/commonjs/mol-canvas3d/canvas3d.js +4 -0
- package/lib/commonjs/mol-canvas3d/passes/dof.d.ts +34 -0
- package/lib/commonjs/mol-canvas3d/passes/dof.js +167 -0
- package/lib/commonjs/mol-canvas3d/passes/draw.d.ts +2 -0
- package/lib/commonjs/mol-canvas3d/passes/draw.js +31 -8
- package/lib/commonjs/mol-canvas3d/passes/image.d.ts +8 -0
- package/lib/commonjs/mol-canvas3d/passes/postprocessing.d.ts +8 -0
- package/lib/commonjs/mol-canvas3d/passes/postprocessing.js +5 -0
- package/lib/commonjs/mol-geo/geometry/lines/lines.d.ts +0 -1
- package/lib/commonjs/mol-gl/shader/background.frag.js +95 -95
- package/lib/commonjs/mol-gl/shader/background.vert.js +11 -11
- package/lib/commonjs/mol-gl/shader/blend-back-dpoit.frag.js +13 -13
- package/lib/commonjs/mol-gl/shader/bloom/blur.frag.js +28 -28
- package/lib/commonjs/mol-gl/shader/bloom/composite.frag.js +33 -33
- package/lib/commonjs/mol-gl/shader/bloom/luminosity.frag.js +52 -52
- package/lib/commonjs/mol-gl/shader/cas.frag.js +144 -144
- package/lib/commonjs/mol-gl/shader/chunks/apply-fog.glsl.js +31 -31
- package/lib/commonjs/mol-gl/shader/chunks/apply-interior-color.glsl.js +12 -12
- package/lib/commonjs/mol-gl/shader/chunks/apply-light-color.glsl.js +77 -77
- package/lib/commonjs/mol-gl/shader/chunks/apply-marker-color.glsl.js +16 -16
- package/lib/commonjs/mol-gl/shader/chunks/assign-clipping-varying.glsl.js +8 -8
- package/lib/commonjs/mol-gl/shader/chunks/assign-color-varying.glsl.js +140 -140
- package/lib/commonjs/mol-gl/shader/chunks/assign-group.glsl.js +6 -6
- package/lib/commonjs/mol-gl/shader/chunks/assign-marker-varying.glsl.js +8 -8
- package/lib/commonjs/mol-gl/shader/chunks/assign-material-color.glsl.js +112 -112
- package/lib/commonjs/mol-gl/shader/chunks/assign-position.glsl.js +14 -14
- package/lib/commonjs/mol-gl/shader/chunks/assign-size.glsl.js +18 -18
- package/lib/commonjs/mol-gl/shader/chunks/check-picking-alpha.glsl.js +12 -12
- package/lib/commonjs/mol-gl/shader/chunks/check-transparency.glsl.js +16 -16
- package/lib/commonjs/mol-gl/shader/chunks/clip-instance.glsl.js +7 -7
- package/lib/commonjs/mol-gl/shader/chunks/clip-pixel.glsl.js +5 -5
- package/lib/commonjs/mol-gl/shader/chunks/color-frag-params.glsl.js +60 -60
- package/lib/commonjs/mol-gl/shader/chunks/color-vert-params.glsl.js +122 -122
- package/lib/commonjs/mol-gl/shader/chunks/common-clip.glsl.js +104 -104
- package/lib/commonjs/mol-gl/shader/chunks/common-frag-params.glsl.js +150 -150
- package/lib/commonjs/mol-gl/shader/chunks/common-vert-params.glsl.js +61 -61
- package/lib/commonjs/mol-gl/shader/chunks/common.glsl.js +234 -234
- package/lib/commonjs/mol-gl/shader/chunks/dpoit-write.glsl.js +62 -62
- package/lib/commonjs/mol-gl/shader/chunks/fade-lod.glsl.js +42 -42
- package/lib/commonjs/mol-gl/shader/chunks/float-to-rgba.glsl.js +39 -39
- package/lib/commonjs/mol-gl/shader/chunks/light-frag-params.glsl.js +127 -127
- package/lib/commonjs/mol-gl/shader/chunks/matrix-scale.glsl.js +5 -5
- package/lib/commonjs/mol-gl/shader/chunks/normal-frag-params.glsl.js +2 -2
- package/lib/commonjs/mol-gl/shader/chunks/read-from-texture.glsl.js +14 -14
- package/lib/commonjs/mol-gl/shader/chunks/rgba-to-float.glsl.js +84 -84
- package/lib/commonjs/mol-gl/shader/chunks/size-vert-params.glsl.js +11 -11
- package/lib/commonjs/mol-gl/shader/chunks/texture3d-from-1d-trilinear.glsl.js +23 -23
- package/lib/commonjs/mol-gl/shader/chunks/texture3d-from-2d-linear.glsl.js +17 -17
- package/lib/commonjs/mol-gl/shader/chunks/texture3d-from-2d-nearest.glsl.js +8 -8
- package/lib/commonjs/mol-gl/shader/chunks/wboit-write.glsl.js +25 -25
- package/lib/commonjs/mol-gl/shader/compose.frag.js +12 -12
- package/lib/commonjs/mol-gl/shader/compute/color-smoothing/accumulate.frag.js +23 -23
- package/lib/commonjs/mol-gl/shader/compute/color-smoothing/accumulate.vert.js +43 -43
- package/lib/commonjs/mol-gl/shader/compute/color-smoothing/normalize.frag.js +15 -15
- package/lib/commonjs/mol-gl/shader/copy.frag.js +11 -11
- package/lib/commonjs/mol-gl/shader/cylinders.frag.js +266 -266
- package/lib/commonjs/mol-gl/shader/cylinders.vert.js +89 -89
- package/lib/commonjs/mol-gl/shader/depth-merge.frag.js +23 -23
- package/lib/commonjs/mol-gl/shader/direct-volume.frag.js +362 -362
- package/lib/commonjs/mol-gl/shader/direct-volume.vert.js +41 -41
- package/lib/commonjs/mol-gl/shader/dof.frag.d.ts +7 -0
- package/lib/commonjs/mol-gl/shader/dof.frag.js +122 -0
- package/lib/commonjs/mol-gl/shader/evaluate-dpoit.frag.js +10 -10
- package/lib/commonjs/mol-gl/shader/evaluate-wboit.frag.js +17 -17
- package/lib/commonjs/mol-gl/shader/fxaa.frag.js +228 -228
- package/lib/commonjs/mol-gl/shader/gaussian-density.frag.js +49 -49
- package/lib/commonjs/mol-gl/shader/gaussian-density.vert.js +27 -27
- package/lib/commonjs/mol-gl/shader/hi-z.frag.js +18 -18
- package/lib/commonjs/mol-gl/shader/histogram-pyramid/reduction.frag.js +58 -58
- package/lib/commonjs/mol-gl/shader/histogram-pyramid/sum.frag.js +19 -19
- package/lib/commonjs/mol-gl/shader/image.frag.js +169 -169
- package/lib/commonjs/mol-gl/shader/image.vert.js +21 -21
- package/lib/commonjs/mol-gl/shader/lines.frag.js +42 -42
- package/lib/commonjs/mol-gl/shader/lines.vert.js +117 -117
- package/lib/commonjs/mol-gl/shader/marching-cubes/active-voxels.frag.js +70 -70
- package/lib/commonjs/mol-gl/shader/marching-cubes/isosurface.frag.js +311 -311
- package/lib/commonjs/mol-gl/shader/marking/edge.frag.js +28 -28
- package/lib/commonjs/mol-gl/shader/marking/overlay.frag.js +26 -26
- package/lib/commonjs/mol-gl/shader/mesh.frag.js +65 -65
- package/lib/commonjs/mol-gl/shader/mesh.vert.js +49 -49
- package/lib/commonjs/mol-gl/shader/outlines.frag.js +95 -95
- package/lib/commonjs/mol-gl/shader/points.frag.js +59 -59
- package/lib/commonjs/mol-gl/shader/points.vert.js +38 -38
- package/lib/commonjs/mol-gl/shader/postprocessing.frag.js +150 -150
- package/lib/commonjs/mol-gl/shader/quad.vert.js +10 -10
- package/lib/commonjs/mol-gl/shader/shadows.frag.js +123 -123
- package/lib/commonjs/mol-gl/shader/smaa/blend.frag.js +56 -56
- package/lib/commonjs/mol-gl/shader/smaa/blend.vert.js +25 -25
- package/lib/commonjs/mol-gl/shader/smaa/edges.frag.js +66 -66
- package/lib/commonjs/mol-gl/shader/smaa/edges.vert.js +26 -26
- package/lib/commonjs/mol-gl/shader/smaa/weights.frag.js +206 -206
- package/lib/commonjs/mol-gl/shader/smaa/weights.vert.js +32 -32
- package/lib/commonjs/mol-gl/shader/spheres.frag.js +148 -148
- package/lib/commonjs/mol-gl/shader/spheres.vert.js +132 -132
- package/lib/commonjs/mol-gl/shader/ssao-blur.frag.js +97 -97
- package/lib/commonjs/mol-gl/shader/ssao.frag.js +211 -211
- package/lib/commonjs/mol-gl/shader/text.frag.js +85 -85
- package/lib/commonjs/mol-gl/shader/text.vert.js +85 -85
- package/lib/commonjs/mol-gl/shader/util/grid3d-template.frag.js +46 -46
- package/lib/commonjs/mol-gl/shader-code.js +15 -15
- package/lib/commonjs/mol-gl/webgl/compat.js +12 -12
- package/lib/commonjs/mol-gl/webgl/context.js +1 -0
- package/lib/commonjs/mol-gl/webgl/timer.d.ts +1 -1
- package/lib/commonjs/mol-gl/webgl/timer.js +8 -1
- package/lib/commonjs/mol-math/linear-algebra/3d/minimize-rmsd.js +2 -1
- package/lib/commonjs/mol-plugin/animation-loop.d.ts +1 -0
- package/lib/commonjs/mol-plugin/behavior/dynamic/volume-streaming/behavior.d.ts +6 -6
- package/lib/commonjs/mol-plugin/behavior/dynamic/volume-streaming/model.d.ts +1 -1
- package/lib/commonjs/mol-plugin/behavior/dynamic/volume-streaming/transformers.d.ts +3 -3
- package/lib/commonjs/mol-plugin-state/animation/built-in/state-snapshots.js +7 -3
- package/lib/commonjs/mol-plugin-ui/viewport/simple-settings.js +3 -0
- package/lib/commonjs/servers/common/swagger-ui/indexTemplate.js +66 -66
- package/lib/commonjs/servers/volume/config.js +5 -5
- package/lib/examples/alpha-orbitals/example-data.js +160 -160
- package/lib/examples/alpha-orbitals/index.html +72 -72
- package/lib/examples/basic-wrapper/index.html +137 -137
- package/lib/examples/lighting/index.html +88 -88
- package/lib/examples/proteopedia-wrapper/index.html +236 -236
- package/lib/extensions/alpha-orbitals/gpu/shader.frag.js +136 -136
- package/lib/extensions/assembly-symmetry/prop.js +24 -24
- package/lib/extensions/dnatco/confal-pyramids/behavior.js +5 -5
- package/lib/extensions/dnatco/ntc-tube/behavior.js +5 -5
- package/lib/extensions/geo-export/usdz-exporter.js +41 -41
- package/lib/extensions/meshes/mesh-extension.d.ts +1 -0
- package/lib/extensions/mp4-export/encoder.js +1 -1
- package/lib/extensions/mvs/components/annotation-label/representation.d.ts +0 -2
- package/lib/extensions/mvs/components/custom-label/representation.d.ts +2 -2
- package/lib/extensions/mvs/tree/mvs/mvs-builder.d.ts +8 -2
- package/lib/extensions/sb-ncbr/index.d.ts +8 -0
- package/lib/extensions/sb-ncbr/index.js +8 -0
- package/lib/extensions/sb-ncbr/tunnels/actions.d.ts +20 -0
- package/lib/extensions/sb-ncbr/tunnels/actions.js +86 -0
- package/lib/extensions/sb-ncbr/tunnels/algorithm.d.ts +26 -0
- package/lib/extensions/sb-ncbr/tunnels/algorithm.js +469 -0
- package/lib/extensions/sb-ncbr/tunnels/behavior.d.ts +40 -0
- package/lib/extensions/sb-ncbr/tunnels/behavior.js +92 -0
- package/lib/extensions/sb-ncbr/tunnels/data-model.d.ts +146 -0
- package/lib/extensions/sb-ncbr/tunnels/data-model.js +23 -0
- package/lib/extensions/sb-ncbr/tunnels/examples.d.ts +12 -0
- package/lib/extensions/sb-ncbr/tunnels/examples.js +49 -0
- package/lib/extensions/sb-ncbr/tunnels/props.d.ts +19 -0
- package/lib/extensions/sb-ncbr/tunnels/props.js +22 -0
- package/lib/extensions/sb-ncbr/tunnels/representation.d.ts +29 -0
- package/lib/extensions/sb-ncbr/tunnels/representation.js +96 -0
- package/lib/mol-canvas3d/canvas3d.d.ts +17 -0
- package/lib/mol-canvas3d/canvas3d.js +4 -0
- package/lib/mol-canvas3d/passes/dof.d.ts +34 -0
- package/lib/mol-canvas3d/passes/dof.js +163 -0
- package/lib/mol-canvas3d/passes/draw.d.ts +2 -0
- package/lib/mol-canvas3d/passes/draw.js +31 -8
- package/lib/mol-canvas3d/passes/image.d.ts +8 -0
- package/lib/mol-canvas3d/passes/postprocessing.d.ts +8 -0
- package/lib/mol-canvas3d/passes/postprocessing.js +5 -0
- package/lib/mol-geo/geometry/lines/lines.d.ts +0 -1
- package/lib/mol-gl/shader/background.frag.js +95 -95
- package/lib/mol-gl/shader/background.vert.js +11 -11
- package/lib/mol-gl/shader/blend-back-dpoit.frag.js +13 -13
- package/lib/mol-gl/shader/bloom/blur.frag.js +28 -28
- package/lib/mol-gl/shader/bloom/composite.frag.js +33 -33
- package/lib/mol-gl/shader/bloom/luminosity.frag.js +52 -52
- package/lib/mol-gl/shader/cas.frag.js +144 -144
- package/lib/mol-gl/shader/chunks/apply-fog.glsl.js +31 -31
- package/lib/mol-gl/shader/chunks/apply-interior-color.glsl.js +12 -12
- package/lib/mol-gl/shader/chunks/apply-light-color.glsl.js +77 -77
- package/lib/mol-gl/shader/chunks/apply-marker-color.glsl.js +16 -16
- package/lib/mol-gl/shader/chunks/assign-clipping-varying.glsl.js +8 -8
- package/lib/mol-gl/shader/chunks/assign-color-varying.glsl.js +140 -140
- package/lib/mol-gl/shader/chunks/assign-group.glsl.js +6 -6
- package/lib/mol-gl/shader/chunks/assign-marker-varying.glsl.js +8 -8
- package/lib/mol-gl/shader/chunks/assign-material-color.glsl.js +112 -112
- package/lib/mol-gl/shader/chunks/assign-position.glsl.js +14 -14
- package/lib/mol-gl/shader/chunks/assign-size.glsl.js +18 -18
- package/lib/mol-gl/shader/chunks/check-picking-alpha.glsl.js +12 -12
- package/lib/mol-gl/shader/chunks/check-transparency.glsl.js +16 -16
- package/lib/mol-gl/shader/chunks/clip-instance.glsl.js +7 -7
- package/lib/mol-gl/shader/chunks/clip-pixel.glsl.js +5 -5
- package/lib/mol-gl/shader/chunks/color-frag-params.glsl.js +60 -60
- package/lib/mol-gl/shader/chunks/color-vert-params.glsl.js +122 -122
- package/lib/mol-gl/shader/chunks/common-clip.glsl.js +104 -104
- package/lib/mol-gl/shader/chunks/common-frag-params.glsl.js +150 -150
- package/lib/mol-gl/shader/chunks/common-vert-params.glsl.js +61 -61
- package/lib/mol-gl/shader/chunks/common.glsl.js +234 -234
- package/lib/mol-gl/shader/chunks/dpoit-write.glsl.js +62 -62
- package/lib/mol-gl/shader/chunks/fade-lod.glsl.js +42 -42
- package/lib/mol-gl/shader/chunks/float-to-rgba.glsl.js +39 -39
- package/lib/mol-gl/shader/chunks/light-frag-params.glsl.js +127 -127
- package/lib/mol-gl/shader/chunks/matrix-scale.glsl.js +5 -5
- package/lib/mol-gl/shader/chunks/normal-frag-params.glsl.js +2 -2
- package/lib/mol-gl/shader/chunks/read-from-texture.glsl.js +14 -14
- package/lib/mol-gl/shader/chunks/rgba-to-float.glsl.js +84 -84
- package/lib/mol-gl/shader/chunks/size-vert-params.glsl.js +11 -11
- package/lib/mol-gl/shader/chunks/texture3d-from-1d-trilinear.glsl.js +23 -23
- package/lib/mol-gl/shader/chunks/texture3d-from-2d-linear.glsl.js +17 -17
- package/lib/mol-gl/shader/chunks/texture3d-from-2d-nearest.glsl.js +8 -8
- package/lib/mol-gl/shader/chunks/wboit-write.glsl.js +25 -25
- package/lib/mol-gl/shader/compose.frag.js +12 -12
- package/lib/mol-gl/shader/compute/color-smoothing/accumulate.frag.js +23 -23
- package/lib/mol-gl/shader/compute/color-smoothing/accumulate.vert.js +43 -43
- package/lib/mol-gl/shader/compute/color-smoothing/normalize.frag.js +15 -15
- package/lib/mol-gl/shader/copy.frag.js +11 -11
- package/lib/mol-gl/shader/cylinders.frag.js +266 -266
- package/lib/mol-gl/shader/cylinders.vert.js +89 -89
- package/lib/mol-gl/shader/depth-merge.frag.js +23 -23
- package/lib/mol-gl/shader/direct-volume.frag.js +362 -362
- package/lib/mol-gl/shader/direct-volume.vert.js +41 -41
- package/lib/mol-gl/shader/dof.frag.d.ts +7 -0
- package/lib/mol-gl/shader/dof.frag.js +119 -0
- package/lib/mol-gl/shader/evaluate-dpoit.frag.js +10 -10
- package/lib/mol-gl/shader/evaluate-wboit.frag.js +17 -17
- package/lib/mol-gl/shader/fxaa.frag.js +228 -228
- package/lib/mol-gl/shader/gaussian-density.frag.js +49 -49
- package/lib/mol-gl/shader/gaussian-density.vert.js +27 -27
- package/lib/mol-gl/shader/hi-z.frag.js +18 -18
- package/lib/mol-gl/shader/histogram-pyramid/reduction.frag.js +58 -58
- package/lib/mol-gl/shader/histogram-pyramid/sum.frag.js +19 -19
- package/lib/mol-gl/shader/image.frag.js +169 -169
- package/lib/mol-gl/shader/image.vert.js +21 -21
- package/lib/mol-gl/shader/lines.frag.js +42 -42
- package/lib/mol-gl/shader/lines.vert.js +117 -117
- package/lib/mol-gl/shader/marching-cubes/active-voxels.frag.js +70 -70
- package/lib/mol-gl/shader/marching-cubes/isosurface.frag.js +311 -311
- package/lib/mol-gl/shader/marking/edge.frag.js +28 -28
- package/lib/mol-gl/shader/marking/overlay.frag.js +26 -26
- package/lib/mol-gl/shader/mesh.frag.js +65 -65
- package/lib/mol-gl/shader/mesh.vert.js +49 -49
- package/lib/mol-gl/shader/outlines.frag.js +95 -95
- package/lib/mol-gl/shader/points.frag.js +59 -59
- package/lib/mol-gl/shader/points.vert.js +38 -38
- package/lib/mol-gl/shader/postprocessing.frag.js +150 -150
- package/lib/mol-gl/shader/quad.vert.js +10 -10
- package/lib/mol-gl/shader/shadows.frag.js +123 -123
- package/lib/mol-gl/shader/smaa/blend.frag.js +56 -56
- package/lib/mol-gl/shader/smaa/blend.vert.js +25 -25
- package/lib/mol-gl/shader/smaa/edges.frag.js +66 -66
- package/lib/mol-gl/shader/smaa/edges.vert.js +26 -26
- package/lib/mol-gl/shader/smaa/weights.frag.js +206 -206
- package/lib/mol-gl/shader/smaa/weights.vert.js +32 -32
- package/lib/mol-gl/shader/spheres.frag.js +148 -148
- package/lib/mol-gl/shader/spheres.vert.js +132 -132
- package/lib/mol-gl/shader/ssao-blur.frag.js +97 -97
- package/lib/mol-gl/shader/ssao.frag.js +211 -211
- package/lib/mol-gl/shader/text.frag.js +85 -85
- package/lib/mol-gl/shader/text.vert.js +85 -85
- package/lib/mol-gl/shader/util/grid3d-template.frag.js +46 -46
- package/lib/mol-gl/shader-code.js +15 -15
- package/lib/mol-gl/webgl/compat.js +12 -12
- package/lib/mol-gl/webgl/context.js +1 -0
- package/lib/mol-gl/webgl/timer.d.ts +1 -1
- package/lib/mol-gl/webgl/timer.js +8 -1
- package/lib/mol-math/linear-algebra/3d/minimize-rmsd.js +2 -1
- package/lib/mol-plugin/animation-loop.d.ts +1 -0
- package/lib/mol-plugin/behavior/dynamic/volume-streaming/behavior.d.ts +6 -6
- package/lib/mol-plugin/behavior/dynamic/volume-streaming/model.d.ts +1 -1
- package/lib/mol-plugin/behavior/dynamic/volume-streaming/transformers.d.ts +3 -3
- package/lib/mol-plugin/version.js +2 -2
- package/lib/mol-plugin-state/animation/built-in/state-snapshots.js +7 -3
- package/lib/mol-plugin-ui/skin/base/base.scss +37 -37
- package/lib/mol-plugin-ui/skin/base/components/controls-base.scss +333 -333
- package/lib/mol-plugin-ui/skin/base/components/controls.scss +445 -445
- package/lib/mol-plugin-ui/skin/base/components/help.scss +27 -27
- package/lib/mol-plugin-ui/skin/base/components/line-graph.scss +67 -67
- package/lib/mol-plugin-ui/skin/base/components/log.scss +100 -100
- package/lib/mol-plugin-ui/skin/base/components/misc.scss +663 -663
- package/lib/mol-plugin-ui/skin/base/components/sequence.scss +125 -125
- package/lib/mol-plugin-ui/skin/base/components/slider.scss +165 -165
- package/lib/mol-plugin-ui/skin/base/components/tasks.scss +99 -99
- package/lib/mol-plugin-ui/skin/base/components/toast.scss +83 -83
- package/lib/mol-plugin-ui/skin/base/components/transformer.scss +163 -163
- package/lib/mol-plugin-ui/skin/base/components/viewport.scss +194 -194
- package/lib/mol-plugin-ui/skin/base/layout/common.scss +71 -71
- package/lib/mol-plugin-ui/skin/base/layout/controls-landscape.scss +89 -89
- package/lib/mol-plugin-ui/skin/base/layout/controls-outside.scss +98 -98
- package/lib/mol-plugin-ui/skin/base/layout/controls-portrait.scss +108 -108
- package/lib/mol-plugin-ui/skin/base/layout.scss +40 -40
- package/lib/mol-plugin-ui/skin/base/logo.scss +12 -12
- package/lib/mol-plugin-ui/skin/base/normalize.scss +209 -209
- package/lib/mol-plugin-ui/skin/base/ui.scss +40 -40
- package/lib/mol-plugin-ui/skin/base/variables.scss +88 -88
- package/lib/mol-plugin-ui/skin/blue.scss +1 -1
- package/lib/mol-plugin-ui/skin/colors/blue.scss +23 -23
- package/lib/mol-plugin-ui/skin/colors/dark.scss +23 -23
- package/lib/mol-plugin-ui/skin/colors/light.scss +29 -29
- package/lib/mol-plugin-ui/skin/dark.scss +1 -1
- package/lib/mol-plugin-ui/skin/light.scss +1 -1
- package/lib/mol-plugin-ui/viewport/simple-settings.js +3 -0
- package/lib/servers/common/swagger-ui/indexTemplate.js +66 -66
- package/lib/servers/volume/config.js +5 -5
- 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
|
`;
|