@kitware/vtk.js 28.10.1 → 28.11.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/Common/Core/Base64.js +53 -82
- package/Common/Core/CellArray.js +52 -60
- package/Common/Core/ClassHierarchy.js +8 -36
- package/Common/Core/DataArray/Constants.js +6 -6
- package/Common/Core/DataArray.js +185 -270
- package/Common/Core/Endian.js +14 -17
- package/Common/Core/HalfFloat.js +17 -34
- package/Common/Core/ImageHelper.js +17 -25
- package/Common/Core/LookupTable.js +131 -144
- package/Common/Core/Math/Constants.js +8 -8
- package/Common/Core/Math/index.js +778 -903
- package/Common/Core/Math.d.ts +14 -0
- package/Common/Core/Math.js +2 -4
- package/Common/Core/MatrixBuilder.js +99 -151
- package/Common/Core/Points.js +43 -43
- package/Common/Core/PriorityQueue.js +30 -28
- package/Common/Core/ProgressHandler.js +31 -32
- package/Common/Core/ScalarsToColors/Constants.js +4 -4
- package/Common/Core/ScalarsToColors.js +196 -253
- package/Common/Core/StringArray.js +48 -73
- package/Common/Core/URLExtract.js +10 -29
- package/Common/Core/VariantArray.js +48 -73
- package/Common/Core.js +11 -11
- package/Common/DataModel/AbstractPointLocator.js +19 -17
- package/Common/DataModel/BoundingBox.js +322 -490
- package/Common/DataModel/Box.js +46 -63
- package/Common/DataModel/CardinalSpline1D.js +92 -102
- package/Common/DataModel/Cell.js +41 -61
- package/Common/DataModel/CellLinks.js +91 -127
- package/Common/DataModel/CellTypes/Constants.js +7 -6
- package/Common/DataModel/CellTypes.js +55 -74
- package/Common/DataModel/Collection.js +45 -61
- package/Common/DataModel/Cone.js +28 -20
- package/Common/DataModel/Cylinder.js +41 -35
- package/Common/DataModel/DataSet/Constants.js +11 -5
- package/Common/DataModel/DataSet.js +37 -25
- package/Common/DataModel/DataSetAttributes/Constants.js +18 -18
- package/Common/DataModel/DataSetAttributes/FieldData.js +103 -194
- package/Common/DataModel/DataSetAttributes.js +96 -138
- package/Common/DataModel/EdgeLocator.js +45 -70
- package/Common/DataModel/ITKHelper.js +67 -137
- package/Common/DataModel/ImageData.js +115 -172
- package/Common/DataModel/ImplicitBoolean/Constants.js +2 -2
- package/Common/DataModel/ImplicitBoolean.js +66 -96
- package/Common/DataModel/IncrementalOctreeNode.js +201 -231
- package/Common/DataModel/IncrementalOctreePointLocator.js +160 -198
- package/Common/DataModel/KochanekSpline1D.js +78 -81
- package/Common/DataModel/Line/Constants.js +2 -2
- package/Common/DataModel/Line.js +82 -105
- package/Common/DataModel/Locator.js +17 -10
- package/Common/DataModel/Molecule.js +26 -17
- package/Common/DataModel/PiecewiseFunction.js +218 -239
- package/Common/DataModel/Plane.js +90 -113
- package/Common/DataModel/PointSet.js +30 -26
- package/Common/DataModel/PolyData/Constants.js +2 -2
- package/Common/DataModel/PolyData.js +95 -120
- package/Common/DataModel/PolyLine.js +44 -61
- package/Common/DataModel/Polygon/Constants.js +4 -4
- package/Common/DataModel/Polygon.js +128 -169
- package/Common/DataModel/Quad/Constants.js +2 -2
- package/Common/DataModel/Quad.js +61 -100
- package/Common/DataModel/SelectionNode/Constants.js +5 -4
- package/Common/DataModel/SelectionNode.js +25 -21
- package/Common/DataModel/Sphere.js +40 -35
- package/Common/DataModel/Spline1D/Constants.js +3 -2
- package/Common/DataModel/Spline1D.js +34 -18
- package/Common/DataModel/Spline3D/Constants.js +2 -2
- package/Common/DataModel/Spline3D.js +46 -41
- package/Common/DataModel/StructuredData/Constants.js +2 -2
- package/Common/DataModel/StructuredData.js +9 -20
- package/Common/DataModel/Triangle.js +207 -250
- package/Common/DataModel.js +19 -19
- package/Common/System/MobileVR.js +56 -61
- package/Common/System/TimerLog.js +1 -1
- package/Common/System.js +2 -2
- package/Common/Transform/LandmarkTransform/Constants.js +2 -2
- package/Common/Transform/LandmarkTransform.js +133 -117
- package/Common/Transform/Transform.js +42 -57
- package/Common/Transform.js +2 -2
- package/Common/index.js +4 -4
- package/Filters/Core/Cutter.js +134 -146
- package/Filters/Core/PolyDataNormals.js +44 -50
- package/Filters/Core.js +2 -2
- package/Filters/Cornerstone/ImageDataToCornerstoneImage.js +45 -33
- package/Filters/Cornerstone.js +1 -1
- package/Filters/General/AppendPolyData.js +84 -100
- package/Filters/General/Calculator.js +95 -163
- package/Filters/General/ClipClosedSurface/Constants.js +2 -2
- package/Filters/General/ClipClosedSurface.js +341 -416
- package/Filters/General/ClosedPolyLineToSurfaceFilter.js +141 -156
- package/Filters/General/ContourTriangulator/Constants.js +2 -2
- package/Filters/General/ContourTriangulator/helper.js +684 -812
- package/Filters/General/ContourTriangulator.js +92 -89
- package/Filters/General/ImageCropFilter.js +77 -78
- package/Filters/General/ImageDataOutlineFilter.js +42 -36
- package/Filters/General/ImageMarchingCubes/caseTable.js +9 -521
- package/Filters/General/ImageMarchingCubes.js +99 -112
- package/Filters/General/ImageMarchingSquares/caseTable.js +9 -41
- package/Filters/General/ImageMarchingSquares.js +93 -118
- package/Filters/General/ImageOutlineFilter.js +53 -54
- package/Filters/General/ImageSliceFilter.js +39 -30
- package/Filters/General/ImageStreamline.js +107 -124
- package/Filters/General/LineFilter.js +26 -15
- package/Filters/General/MoleculeToRepresentation.js +136 -149
- package/Filters/General/OBBTree/OBBNode.js +36 -34
- package/Filters/General/OBBTree/helper.js +19 -24
- package/Filters/General/OBBTree.js +396 -488
- package/Filters/General/OutlineFilter.js +52 -34
- package/Filters/General/PaintFilter/PaintFilter.worker.js +93 -130
- package/Filters/General/PaintFilter.js +150 -162
- package/Filters/General/ScalarToRGBA.js +38 -33
- package/Filters/General/TriangleFilter.js +65 -62
- package/Filters/General/TubeFilter/Constants.js +4 -4
- package/Filters/General/TubeFilter.js +376 -496
- package/Filters/General/WarpScalar.js +58 -60
- package/Filters/General/WindowedSincPolyDataFilter.js +258 -330
- package/Filters/General.js +21 -21
- package/Filters/Sources/Arrow2DSource/Constants.js +2 -2
- package/Filters/Sources/Arrow2DSource.js +56 -56
- package/Filters/Sources/ArrowSource.js +39 -29
- package/Filters/Sources/CircleSource.js +43 -43
- package/Filters/Sources/ConcentricCylinderSource.js +151 -174
- package/Filters/Sources/ConeSource.js +51 -42
- package/Filters/Sources/CubeSource.js +75 -96
- package/Filters/Sources/Cursor3D.js +94 -109
- package/Filters/Sources/CylinderSource.js +90 -90
- package/Filters/Sources/ImageGridSource.js +43 -43
- package/Filters/Sources/LineSource.js +49 -39
- package/Filters/Sources/PlaneSource.js +97 -104
- package/Filters/Sources/PointSource.js +46 -37
- package/Filters/Sources/RTAnalyticSource.js +50 -48
- package/Filters/Sources/SLICSource.js +63 -73
- package/Filters/Sources/SphereSource.js +88 -78
- package/Filters/Sources/ViewFinderSource.js +26 -23
- package/Filters/Sources.js +14 -14
- package/Filters/Texture/TextureMapToPlane.js +95 -97
- package/Filters/Texture/TextureMapToSphere.js +46 -54
- package/Filters/Texture.js +2 -2
- package/Filters/index.js +5 -5
- package/IO/Core/BinaryHelper.js +12 -18
- package/IO/Core/DataAccessHelper/HtmlDataAccessHelper.js +43 -59
- package/IO/Core/DataAccessHelper/HttpDataAccessHelper.js +76 -113
- package/IO/Core/DataAccessHelper/JSZipDataAccessHelper.js +62 -112
- package/IO/Core/DataAccessHelper/LiteHttpDataAccessHelper.js +76 -113
- package/IO/Core/DataAccessHelper.js +6 -6
- package/IO/Core/HttpDataSetReader.js +136 -139
- package/IO/Core/HttpDataSetSeriesReader.js +64 -75
- package/IO/Core/HttpSceneLoader.js +130 -179
- package/IO/Core/ImageStream/DefaultProtocol.js +29 -43
- package/IO/Core/ImageStream/ViewStream.js +100 -103
- package/IO/Core/ImageStream.js +62 -54
- package/IO/Core/ResourceLoader.js +10 -9
- package/IO/Core/Serializer/ArraySerializer.js +40 -40
- package/IO/Core/Serializer/FieldDataSerializer.js +18 -28
- package/IO/Core/Serializer/ImageDataSerializer.js +22 -23
- package/IO/Core/Serializer/PolyDataSerializer.js +17 -21
- package/IO/Core/Serializer.js +6 -13
- package/IO/Core/WSLinkClient.js +90 -76
- package/IO/Core/ZipMultiDataSetReader.js +46 -44
- package/IO/Core/ZipMultiDataSetWriter.js +43 -34
- package/IO/Core.js +7 -7
- package/IO/Geometry/DracoReader.js +118 -121
- package/IO/Geometry/PLYReader.js +163 -223
- package/IO/Geometry/PLYWriter/Constants.js +5 -5
- package/IO/Geometry/PLYWriter.js +139 -154
- package/IO/Geometry/STLReader.js +123 -146
- package/IO/Geometry/STLWriter/Constants.js +2 -2
- package/IO/Geometry/STLWriter.js +83 -82
- package/IO/Geometry.js +5 -5
- package/IO/Legacy/LegacyAsciiParser.js +78 -139
- package/IO/Legacy/PolyDataReader.js +48 -36
- package/IO/Legacy.js +2 -2
- package/IO/Misc/ElevationReader.js +67 -60
- package/IO/Misc/HttpDataSetLODsLoader.js +41 -38
- package/IO/Misc/ITKImageReader.js +58 -45
- package/IO/Misc/ITKPolyDataReader.js +50 -38
- package/IO/Misc/JSONNucleoReader.js +49 -42
- package/IO/Misc/JSONReader.js +38 -33
- package/IO/Misc/MTLReader.js +74 -119
- package/IO/Misc/OBJReader.js +153 -206
- package/IO/Misc/PDBReader.js +70 -68
- package/IO/Misc/SkyboxReader.js +77 -82
- package/IO/Misc.js +9 -9
- package/IO/XML/XMLImageDataReader.js +36 -38
- package/IO/XML/XMLImageDataWriter.js +28 -21
- package/IO/XML/XMLPolyDataReader.js +49 -46
- package/IO/XML/XMLPolyDataWriter.js +43 -42
- package/IO/XML/XMLReader.js +262 -304
- package/IO/XML/XMLWriter/Constants.js +3 -3
- package/IO/XML/XMLWriter.js +70 -84
- package/IO/XML.js +6 -6
- package/IO/index.js +5 -5
- package/Imaging/Core/AbstractImageInterpolator/Constants.js +4 -4
- package/Imaging/Core/AbstractImageInterpolator/InterpolationInfo.js +30 -27
- package/Imaging/Core/AbstractImageInterpolator.js +74 -87
- package/Imaging/Core/ImageInterpolator.js +201 -252
- package/Imaging/Core/ImagePointDataIterator.js +96 -122
- package/Imaging/Core/ImageReslice/Constants.js +2 -2
- package/Imaging/Core/ImageReslice.js +327 -464
- package/Imaging/Core.js +4 -4
- package/Imaging/Hybrid/SampleFunction.js +58 -51
- package/Imaging/Hybrid.js +1 -1
- package/Imaging/index.js +2 -2
- package/Interaction/Animations/TimeStepBasedAnimationHandler.js +39 -54
- package/Interaction/Manipulators/CompositeCameraManipulator.js +22 -13
- package/Interaction/Manipulators/CompositeGestureManipulator.js +31 -43
- package/Interaction/Manipulators/CompositeKeyboardManipulator.js +15 -11
- package/Interaction/Manipulators/CompositeMouseManipulator.js +27 -33
- package/Interaction/Manipulators/CompositeVRManipulator.js +22 -15
- package/Interaction/Manipulators/GestureCameraManipulator.js +54 -36
- package/Interaction/Manipulators/KeyboardCameraManipulator.js +95 -97
- package/Interaction/Manipulators/MouseBoxSelectorManipulator.js +70 -89
- package/Interaction/Manipulators/MouseCameraAxisRotateManipulator.js +67 -54
- package/Interaction/Manipulators/MouseCameraSliceManipulator.js +40 -38
- package/Interaction/Manipulators/MouseCameraTrackballFirstPersonManipulator.js +83 -68
- package/Interaction/Manipulators/MouseCameraTrackballMultiRotateManipulator.js +32 -28
- package/Interaction/Manipulators/MouseCameraTrackballPanManipulator.js +47 -40
- package/Interaction/Manipulators/MouseCameraTrackballRollManipulator.js +55 -43
- package/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js +56 -46
- package/Interaction/Manipulators/MouseCameraTrackballZoomManipulator.js +41 -46
- package/Interaction/Manipulators/MouseCameraTrackballZoomToMouseManipulator.js +29 -27
- package/Interaction/Manipulators/MouseCameraUnicamManipulator.js +123 -146
- package/Interaction/Manipulators/MouseCameraUnicamRotateManipulator.js +144 -166
- package/Interaction/Manipulators/MouseRangeManipulator.js +127 -132
- package/Interaction/Manipulators/VRButtonPanManipulator.js +33 -23
- package/Interaction/Manipulators.js +21 -21
- package/Interaction/Misc/DeviceOrientationToCamera.js +25 -47
- package/Interaction/Misc.js +1 -1
- package/Interaction/Style/InteractorStyleImage.js +101 -121
- package/Interaction/Style/InteractorStyleMPRSlice.js +111 -128
- package/Interaction/Style/InteractorStyleManipulator/Presets.js +9 -17
- package/Interaction/Style/InteractorStyleManipulator.js +254 -329
- package/Interaction/Style/InteractorStyleRemoteMouse.js +195 -180
- package/Interaction/Style/InteractorStyleTrackballCamera.js +154 -157
- package/Interaction/Style/InteractorStyleUnicam.js +30 -38
- package/Interaction/Style.js +5 -5
- package/Interaction/UI/CornerAnnotation/CornerAnnotation.module.css.js +1 -1
- package/Interaction/UI/CornerAnnotation.js +65 -48
- package/Interaction/UI/FPSMonitor.js +104 -105
- package/Interaction/UI/Icons.js +1 -1
- package/Interaction/UI/Slider/Constants.js +2 -2
- package/Interaction/UI/Slider.js +78 -95
- package/Interaction/UI/VolumeController.js +104 -97
- package/Interaction/UI.js +5 -5
- package/Interaction/Widgets/OrientationMarkerWidget/Constants.js +2 -2
- package/Interaction/Widgets/OrientationMarkerWidget.js +90 -135
- package/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +0 -3
- package/Interaction/Widgets/PiecewiseGaussianWidget.js +381 -498
- package/Interaction/Widgets.js +2 -2
- package/Interaction/index.js +5 -5
- package/Proxy/Animation/AbstractAnimationProxy.js +22 -15
- package/Proxy/Animation/AnimationProxyManager.js +43 -51
- package/Proxy/Animation/TimeStepBasedAnimationHandlerProxy.js +26 -19
- package/Proxy/Core/AbstractRepresentationProxy.js +97 -151
- package/Proxy/Core/LookupTableProxy/Constants.js +4 -4
- package/Proxy/Core/LookupTableProxy.js +49 -52
- package/Proxy/Core/PiecewiseFunctionProxy/Constants.js +4 -4
- package/Proxy/Core/PiecewiseFunctionProxy.js +63 -72
- package/Proxy/Core/ProxyManager/core.js +83 -106
- package/Proxy/Core/ProxyManager/properties.js +53 -76
- package/Proxy/Core/ProxyManager/state.js +100 -110
- package/Proxy/Core/ProxyManager/view.js +45 -55
- package/Proxy/Core/ProxyManager.js +16 -8
- package/Proxy/Core/SourceProxy.js +41 -38
- package/Proxy/Core/View2DProxy.js +143 -199
- package/Proxy/Core/ViewProxy.js +223 -269
- package/Proxy/Core.js +7 -7
- package/Proxy/Representations/GeometryRepresentationProxy.js +34 -20
- package/Proxy/Representations/GlyphRepresentationProxy.js +42 -41
- package/Proxy/Representations/MoleculeRepresentationProxy.js +32 -22
- package/Proxy/Representations/ResliceRepresentationProxy.js +48 -32
- package/Proxy/Representations/SkyboxRepresentationProxy.js +30 -29
- package/Proxy/Representations/SliceRepresentationProxy.js +93 -112
- package/Proxy/Representations/SlicedGeometryRepresentationProxy.js +46 -42
- package/Proxy/Representations/VolumeRepresentationProxy.js +108 -133
- package/Proxy/Representations.js +7 -7
- package/Proxy/index.js +2 -2
- package/Rendering/Core/AbstractImageMapper/helper.js +44 -49
- package/Rendering/Core/AbstractImageMapper.js +18 -19
- package/Rendering/Core/AbstractMapper.js +39 -55
- package/Rendering/Core/AbstractMapper3D.js +26 -31
- package/Rendering/Core/AbstractPicker.js +25 -21
- package/Rendering/Core/Actor.js +71 -93
- package/Rendering/Core/Actor2D.js +64 -78
- package/Rendering/Core/AnnotatedCubeActor/Presets.js +5 -11
- package/Rendering/Core/AnnotatedCubeActor.js +94 -79
- package/Rendering/Core/AxesActor.js +65 -87
- package/Rendering/Core/Camera.js +246 -271
- package/Rendering/Core/CellPicker.js +125 -148
- package/Rendering/Core/ColorTransferFunction/ColorMaps.js +20 -21
- package/Rendering/Core/ColorTransferFunction/ColorMapsLite.js +20 -21
- package/Rendering/Core/ColorTransferFunction/Constants.js +4 -4
- package/Rendering/Core/ColorTransferFunction.js +460 -546
- package/Rendering/Core/Coordinate/Constants.js +2 -2
- package/Rendering/Core/Coordinate.js +119 -198
- package/Rendering/Core/CubeAxesActor.js +294 -320
- package/Rendering/Core/Follower.js +46 -45
- package/Rendering/Core/Glyph3DMapper/Constants.js +4 -4
- package/Rendering/Core/Glyph3DMapper.js +96 -148
- package/Rendering/Core/HardwareSelector.js +36 -69
- package/Rendering/Core/ImageArrayMapper.js +87 -126
- package/Rendering/Core/ImageCPRMapper.js +134 -209
- package/Rendering/Core/ImageMapper/Constants.js +2 -2
- package/Rendering/Core/ImageMapper.js +92 -170
- package/Rendering/Core/ImageProperty/Constants.js +2 -2
- package/Rendering/Core/ImageProperty.js +66 -81
- package/Rendering/Core/ImageResliceMapper/Constants.js +2 -2
- package/Rendering/Core/ImageResliceMapper.js +36 -29
- package/Rendering/Core/ImageSlice.js +85 -127
- package/Rendering/Core/InteractorObserver.js +82 -73
- package/Rendering/Core/InteractorStyle/Constants.js +2 -2
- package/Rendering/Core/InteractorStyle.js +56 -58
- package/Rendering/Core/Light.js +43 -49
- package/Rendering/Core/Mapper/CoincidentTopologyHelper.js +37 -48
- package/Rendering/Core/Mapper/Constants.js +6 -6
- package/Rendering/Core/Mapper/Static.js +15 -12
- package/Rendering/Core/Mapper.js +194 -259
- package/Rendering/Core/Mapper2D.js +61 -100
- package/Rendering/Core/Picker.js +124 -143
- package/Rendering/Core/PixelSpaceCallbackMapper.js +40 -37
- package/Rendering/Core/PointPicker.js +68 -79
- package/Rendering/Core/Prop/Constants.js +2 -2
- package/Rendering/Core/Prop.js +58 -106
- package/Rendering/Core/Prop3D.js +54 -83
- package/Rendering/Core/Property/Constants.js +6 -6
- package/Rendering/Core/Property.js +45 -74
- package/Rendering/Core/Property2D/Constants.js +2 -2
- package/Rendering/Core/Property2D.js +33 -42
- package/Rendering/Core/RenderWindow.js +70 -82
- package/Rendering/Core/RenderWindowInteractor/Constants.js +7 -7
- package/Rendering/Core/RenderWindowInteractor.js +324 -439
- package/Rendering/Core/Renderer.js +193 -257
- package/Rendering/Core/ScalarBarActor.js +267 -272
- package/Rendering/Core/Skybox.js +26 -24
- package/Rendering/Core/SphereMapper.js +22 -12
- package/Rendering/Core/StickMapper.js +22 -12
- package/Rendering/Core/SurfaceLICInterface/Constants.js +6 -6
- package/Rendering/Core/SurfaceLICInterface.js +13 -9
- package/Rendering/Core/SurfaceLICMapper.js +23 -15
- package/Rendering/Core/Texture.js +99 -141
- package/Rendering/Core/Viewport.js +60 -88
- package/Rendering/Core/Volume.js +55 -77
- package/Rendering/Core/VolumeMapper/Constants.js +4 -4
- package/Rendering/Core/VolumeMapper.js +59 -91
- package/Rendering/Core/VolumeProperty/Constants.js +4 -4
- package/Rendering/Core/VolumeProperty.js +78 -115
- package/Rendering/Core.js +47 -49
- package/Rendering/Misc/CanvasView.js +62 -61
- package/Rendering/Misc/FullScreenRenderWindow.js +60 -62
- package/Rendering/Misc/GenericRenderWindow.js +48 -37
- package/Rendering/Misc/RemoteView.js +86 -80
- package/Rendering/Misc/RenderWindowWithControlBar.js +54 -48
- package/Rendering/Misc/SynchronizableRenderWindow/BehaviorManager/CameraSynchronizer.js +43 -51
- package/Rendering/Misc/SynchronizableRenderWindow/BehaviorManager.js +52 -82
- package/Rendering/Misc/SynchronizableRenderWindow/ObjectManager.js +258 -308
- package/Rendering/Misc/SynchronizableRenderWindow.js +133 -163
- package/Rendering/Misc/TextureLODsDownloader.js +72 -74
- package/Rendering/Misc.js +7 -7
- package/Rendering/OpenGL/Actor.js +57 -68
- package/Rendering/OpenGL/Actor2D.js +56 -56
- package/Rendering/OpenGL/BufferObject/Constants.js +2 -2
- package/Rendering/OpenGL/BufferObject.js +50 -65
- package/Rendering/OpenGL/Camera.js +35 -29
- package/Rendering/OpenGL/CellArrayBufferObject.js +119 -149
- package/Rendering/OpenGL/Convolution2DPass.js +87 -81
- package/Rendering/OpenGL/CubeAxesActor.js +28 -21
- package/Rendering/OpenGL/ForwardPass.js +53 -64
- package/Rendering/OpenGL/Framebuffer.js +61 -101
- package/Rendering/OpenGL/Glyph3DMapper.js +165 -196
- package/Rendering/OpenGL/HardwareSelector/Constants.js +2 -2
- package/Rendering/OpenGL/HardwareSelector.js +272 -397
- package/Rendering/OpenGL/Helper.js +58 -73
- package/Rendering/OpenGL/ImageCPRMapper.js +339 -421
- package/Rendering/OpenGL/ImageMapper.js +268 -361
- package/Rendering/OpenGL/ImageResliceMapper.js +306 -438
- package/Rendering/OpenGL/ImageSlice.js +48 -54
- package/Rendering/OpenGL/OrderIndependentTranslucentPass.js +102 -84
- package/Rendering/OpenGL/PixelSpaceCallbackMapper.js +43 -42
- package/Rendering/OpenGL/PolyDataMapper.js +358 -492
- package/Rendering/OpenGL/PolyDataMapper2D.js +153 -205
- package/Rendering/OpenGL/RadialDistortionPass.js +86 -89
- package/Rendering/OpenGL/RenderWindow/Constants.js +2 -2
- package/Rendering/OpenGL/RenderWindow/ContextProxy.js +20 -29
- package/Rendering/OpenGL/RenderWindow.js +356 -510
- package/Rendering/OpenGL/Renderer.js +77 -89
- package/Rendering/OpenGL/ReplacementShaderMapper.js +28 -46
- package/Rendering/OpenGL/ScalarBarActor.js +28 -21
- package/Rendering/OpenGL/Shader.js +37 -31
- package/Rendering/OpenGL/ShaderCache.js +67 -74
- package/Rendering/OpenGL/ShaderProgram.js +136 -248
- package/Rendering/OpenGL/Skybox.js +99 -60
- package/Rendering/OpenGL/SphereMapper.js +94 -108
- package/Rendering/OpenGL/StickMapper.js +110 -114
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D/pingpong.js +91 -157
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D.js +142 -151
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICInterface.js +142 -216
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICMapper.js +79 -100
- package/Rendering/OpenGL/SurfaceLIC.js +2 -2
- package/Rendering/OpenGL/Texture/Constants.js +4 -4
- package/Rendering/OpenGL/Texture.js +444 -609
- package/Rendering/OpenGL/TextureUnitManager.js +47 -43
- package/Rendering/OpenGL/VertexArrayObject.js +92 -131
- package/Rendering/OpenGL/ViewNodeFactory.js +25 -13
- package/Rendering/OpenGL/Volume.js +38 -34
- package/Rendering/OpenGL/VolumeMapper.js +437 -547
- package/Rendering/OpenGL.js +28 -28
- package/Rendering/SceneGraph/RenderPass.js +34 -31
- package/Rendering/SceneGraph/RenderWindowViewNode.js +68 -94
- package/Rendering/SceneGraph/ViewNode.js +82 -111
- package/Rendering/SceneGraph/ViewNodeFactory.js +31 -26
- package/Rendering/SceneGraph.js +4 -4
- package/Rendering/WebGPU/Actor.js +49 -49
- package/Rendering/WebGPU/Actor2D.js +45 -44
- package/Rendering/WebGPU/BindGroup.js +43 -50
- package/Rendering/WebGPU/Buffer.js +41 -50
- package/Rendering/WebGPU/BufferManager/Constants.js +4 -4
- package/Rendering/WebGPU/BufferManager.js +111 -141
- package/Rendering/WebGPU/Camera.js +65 -67
- package/Rendering/WebGPU/CellArrayMapper.js +621 -388
- package/Rendering/WebGPU/CubeAxesActor.js +28 -19
- package/Rendering/WebGPU/Device.js +78 -133
- package/Rendering/WebGPU/ForwardPass.js +75 -72
- package/Rendering/WebGPU/FullScreenQuad.js +25 -18
- package/Rendering/WebGPU/Glyph3DMapper.js +62 -74
- package/Rendering/WebGPU/HardwareSelectionPass.js +45 -38
- package/Rendering/WebGPU/HardwareSelector.js +200 -276
- package/Rendering/WebGPU/ImageMapper.js +180 -171
- package/Rendering/WebGPU/ImageSlice.js +45 -44
- package/Rendering/WebGPU/IndexBuffer.js +166 -200
- package/Rendering/WebGPU/OpaquePass.js +37 -36
- package/Rendering/WebGPU/OrderIndependentTranslucentPass.js +72 -45
- package/Rendering/WebGPU/Pipeline.js +37 -51
- package/Rendering/WebGPU/PixelSpaceCallbackMapper.js +27 -19
- package/Rendering/WebGPU/PolyDataMapper.js +50 -53
- package/Rendering/WebGPU/PolyDataMapper2D.js +39 -39
- package/Rendering/WebGPU/RenderEncoder.js +68 -88
- package/Rendering/WebGPU/RenderWindow.js +262 -376
- package/Rendering/WebGPU/Renderer.js +224 -208
- package/Rendering/WebGPU/Sampler.js +27 -21
- package/Rendering/WebGPU/ScalarBarActor.js +28 -19
- package/Rendering/WebGPU/ShaderCache.js +43 -41
- package/Rendering/WebGPU/ShaderDescription.js +52 -59
- package/Rendering/WebGPU/ShaderModule.js +26 -17
- package/Rendering/WebGPU/SimpleMapper.js +185 -121
- package/Rendering/WebGPU/SphereMapper.js +200 -130
- package/Rendering/WebGPU/StickMapper.js +289 -152
- package/Rendering/WebGPU/StorageBuffer.js +100 -115
- package/Rendering/WebGPU/Texture.js +79 -99
- package/Rendering/WebGPU/TextureManager.js +52 -54
- package/Rendering/WebGPU/TextureView.js +40 -43
- package/Rendering/WebGPU/Types.js +53 -70
- package/Rendering/WebGPU/UniformBuffer.js +158 -184
- package/Rendering/WebGPU/VertexInput.js +64 -90
- package/Rendering/WebGPU/ViewNodeFactory.js +25 -13
- package/Rendering/WebGPU/Volume.js +52 -51
- package/Rendering/WebGPU/VolumePass.js +218 -239
- package/Rendering/WebGPU/VolumePassFSQ.js +625 -306
- package/Rendering/WebGPU.js +1 -1
- package/Rendering/index.js +5 -5
- package/Widgets/Core/AbstractWidget/Constants.js +2 -2
- package/Widgets/Core/AbstractWidget.js +49 -58
- package/Widgets/Core/AbstractWidgetFactory.js +101 -122
- package/Widgets/Core/StateBuilder/boundsMixin.js +23 -28
- package/Widgets/Core/StateBuilder/color3Mixin.js +10 -7
- package/Widgets/Core/StateBuilder/colorMixin.js +10 -6
- package/Widgets/Core/StateBuilder/cornerMixin.js +16 -15
- package/Widgets/Core/StateBuilder/directionMixin.js +20 -18
- package/Widgets/Core/StateBuilder/manipulatorMixin.js +26 -18
- package/Widgets/Core/StateBuilder/nameMixin.js +10 -6
- package/Widgets/Core/StateBuilder/orientationMixin.js +19 -16
- package/Widgets/Core/StateBuilder/originMixin.js +25 -32
- package/Widgets/Core/StateBuilder/scale1Mixin.js +10 -6
- package/Widgets/Core/StateBuilder/scale3Mixin.js +10 -6
- package/Widgets/Core/StateBuilder/shapeMixin.js +12 -6
- package/Widgets/Core/StateBuilder/textMixin.js +10 -6
- package/Widgets/Core/StateBuilder/visibleMixin.js +10 -6
- package/Widgets/Core/StateBuilder.js +120 -149
- package/Widgets/Core/WidgetManager/Constants.js +7 -7
- package/Widgets/Core/WidgetManager.js +249 -421
- package/Widgets/Core/WidgetState.js +48 -57
- package/Widgets/Core.js +5 -5
- package/Widgets/Manipulators/AbstractManipulator.js +20 -14
- package/Widgets/Manipulators/CPRManipulator.js +55 -71
- package/Widgets/Manipulators/LineManipulator.js +31 -28
- package/Widgets/Manipulators/PickerManipulator.d.ts +48 -0
- package/Widgets/Manipulators/PickerManipulator.js +65 -0
- package/Widgets/Manipulators/PlaneManipulator.js +26 -23
- package/Widgets/Manipulators/TrackballManipulator.js +39 -35
- package/Widgets/Manipulators.js +4 -2
- package/Widgets/Representations/ArrowHandleRepresentation.js +148 -162
- package/Widgets/Representations/CircleContextRepresentation.js +44 -38
- package/Widgets/Representations/ContextRepresentation.js +17 -14
- package/Widgets/Representations/ConvexFaceContextRepresentation.js +50 -47
- package/Widgets/Representations/CroppingOutlineRepresentation.js +38 -27
- package/Widgets/Representations/CubeHandleRepresentation.js +21 -18
- package/Widgets/Representations/GlyphRepresentation.js +107 -152
- package/Widgets/Representations/HandleRepresentation.js +17 -14
- package/Widgets/Representations/ImplicitPlaneRepresentation.js +97 -91
- package/Widgets/Representations/LineHandleRepresentation.js +44 -41
- package/Widgets/Representations/OutlineContextRepresentation.js +42 -36
- package/Widgets/Representations/PolyLineRepresentation.js +60 -75
- package/Widgets/Representations/RectangleContextRepresentation.js +42 -37
- package/Widgets/Representations/SphereContextRepresentation.js +19 -27
- package/Widgets/Representations/SphereHandleRepresentation.js +31 -27
- package/Widgets/Representations/SplineContextRepresentation.js +46 -70
- package/Widgets/Representations/WidgetRepresentation/Constants.js +2 -2
- package/Widgets/Representations/WidgetRepresentation.js +99 -134
- package/Widgets/Representations.js +13 -13
- package/Widgets/Widgets3D/AngleWidget/behavior.js +41 -63
- package/Widgets/Widgets3D/AngleWidget.js +41 -39
- package/Widgets/Widgets3D/DistanceWidget/behavior.js +40 -61
- package/Widgets/Widgets3D/DistanceWidget.js +38 -36
- package/Widgets/Widgets3D/EllipseWidget/behavior.js +14 -19
- package/Widgets/Widgets3D/EllipseWidget/state.js +4 -2
- package/Widgets/Widgets3D/EllipseWidget.js +37 -26
- package/Widgets/Widgets3D/ImageCroppingWidget/behavior.js +26 -56
- package/Widgets/Widgets3D/ImageCroppingWidget/helpers.js +14 -17
- package/Widgets/Widgets3D/ImageCroppingWidget/state.js +20 -16
- package/Widgets/Widgets3D/ImageCroppingWidget.js +80 -98
- package/Widgets/Widgets3D/ImplicitPlaneWidget.js +55 -77
- package/Widgets/Widgets3D/InteractiveOrientationWidget/behavior.js +17 -18
- package/Widgets/Widgets3D/InteractiveOrientationWidget/state.js +15 -7
- package/Widgets/Widgets3D/InteractiveOrientationWidget.js +30 -29
- package/Widgets/Widgets3D/LabelWidget/behavior.js +37 -62
- package/Widgets/Widgets3D/LabelWidget.js +31 -25
- package/Widgets/Widgets3D/LineWidget/Constants.js +8 -8
- package/Widgets/Widgets3D/LineWidget/behavior.js +77 -114
- package/Widgets/Widgets3D/LineWidget/helpers.js +13 -20
- package/Widgets/Widgets3D/LineWidget/state.js +2 -1
- package/Widgets/Widgets3D/LineWidget.js +39 -35
- package/Widgets/Widgets3D/PaintWidget/behavior.js +24 -59
- package/Widgets/Widgets3D/PaintWidget.js +39 -37
- package/Widgets/Widgets3D/PolyLineWidget/behavior.js +44 -68
- package/Widgets/Widgets3D/PolyLineWidget.js +36 -31
- package/Widgets/Widgets3D/RectangleWidget/behavior.js +6 -11
- package/Widgets/Widgets3D/RectangleWidget/state.js +4 -2
- package/Widgets/Widgets3D/RectangleWidget.js +37 -25
- package/Widgets/Widgets3D/ResliceCursorWidget/Constants.js +35 -21
- package/Widgets/Widgets3D/ResliceCursorWidget/behavior.js +134 -210
- package/Widgets/Widgets3D/ResliceCursorWidget/cprBehavior.js +26 -41
- package/Widgets/Widgets3D/ResliceCursorWidget/helpers.js +90 -117
- package/Widgets/Widgets3D/ResliceCursorWidget/state.js +33 -40
- package/Widgets/Widgets3D/ResliceCursorWidget.js +186 -227
- package/Widgets/Widgets3D/SeedWidget/behavior.js +82 -0
- package/Widgets/Widgets3D/SeedWidget/state.js +18 -0
- package/Widgets/Widgets3D/SeedWidget.d.ts +44 -0
- package/Widgets/Widgets3D/SeedWidget.js +43 -0
- package/Widgets/Widgets3D/ShapeWidget/Constants.js +19 -19
- package/Widgets/Widgets3D/ShapeWidget/behavior.js +150 -252
- package/Widgets/Widgets3D/ShapeWidget.js +24 -27
- package/Widgets/Widgets3D/SphereWidget/behavior.js +35 -69
- package/Widgets/Widgets3D/SphereWidget/state.js +9 -5
- package/Widgets/Widgets3D/SphereWidget.js +34 -44
- package/Widgets/Widgets3D/SplineWidget/behavior.js +85 -120
- package/Widgets/Widgets3D/SplineWidget.js +43 -39
- package/Widgets/Widgets3D.js +15 -15
- package/Widgets/index.js +4 -4
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Filters/General/PaintFilter/PaintFilter.worker.js +95 -207
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +0 -3
- package/favicon.js +5 -6
- package/index.d.ts +4 -2
- package/index.js +4 -3
- package/macros.js +4 -1931
- package/macros2.js +1684 -0
- package/package.json +6 -6
- package/vtk.js +18 -31
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
|
-
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
3
|
-
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
4
|
-
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
5
1
|
import { VtkDataTypes } from '../../Common/Core/DataArray/Constants.js';
|
|
6
|
-
import macro from '../../
|
|
2
|
+
import { m as macro } from '../../macros2.js';
|
|
7
3
|
import { registerViewConstructor } from '../Core/RenderWindow.js';
|
|
8
4
|
import vtkForwardPass from './ForwardPass.js';
|
|
9
5
|
import vtkHardwareSelector from './HardwareSelector.js';
|
|
@@ -15,88 +11,84 @@ import vtkRenderWindowViewNode from '../SceneGraph/RenderWindowViewNode.js';
|
|
|
15
11
|
import Constants from './RenderWindow/Constants.js';
|
|
16
12
|
import { createContextProxyHandler, GET_UNDERLYING_CONTEXT } from './RenderWindow/ContextProxy.js';
|
|
17
13
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
const {
|
|
15
|
+
vtkDebugMacro,
|
|
16
|
+
vtkErrorMacro
|
|
17
|
+
} = macro;
|
|
18
|
+
const {
|
|
19
|
+
XrSessionTypes
|
|
20
|
+
} = Constants;
|
|
21
|
+
const SCREENSHOT_PLACEHOLDER = {
|
|
22
22
|
position: 'absolute',
|
|
23
23
|
top: 0,
|
|
24
24
|
left: 0,
|
|
25
25
|
width: '100%',
|
|
26
26
|
height: '100%'
|
|
27
27
|
};
|
|
28
|
-
|
|
28
|
+
const DEFAULT_RESET_FACTORS = {
|
|
29
29
|
rescaleFactor: 0.25,
|
|
30
30
|
// isotropic scale factor reduces apparent size of objects
|
|
31
31
|
translateZ: -1.5 // default translation initializes object in front of camera
|
|
32
|
-
|
|
33
32
|
};
|
|
34
33
|
|
|
35
34
|
function checkRenderTargetSupport(gl, format, type) {
|
|
36
35
|
// create temporary frame buffer and texture
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
const framebuffer = gl.createFramebuffer();
|
|
37
|
+
const texture = gl.createTexture();
|
|
39
38
|
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
40
39
|
gl.texImage2D(gl.TEXTURE_2D, 0, format, 2, 2, 0, format, type, null);
|
|
41
40
|
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
|
|
42
|
-
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
|
|
41
|
+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
// check frame buffer status
|
|
44
|
+
const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
|
|
45
45
|
|
|
46
|
+
// clean up
|
|
46
47
|
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
47
48
|
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
48
49
|
return status === gl.FRAMEBUFFER_COMPLETE;
|
|
49
|
-
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// ----------------------------------------------------------------------------
|
|
50
53
|
// Monitor the usage of GL context across vtkOpenGLRenderWindow instances
|
|
51
54
|
// ----------------------------------------------------------------------------
|
|
52
55
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
var GL_CONTEXT_LISTENERS = [];
|
|
56
|
-
|
|
56
|
+
let GL_CONTEXT_COUNT = 0;
|
|
57
|
+
const GL_CONTEXT_LISTENERS = [];
|
|
57
58
|
function createGLContext() {
|
|
58
59
|
GL_CONTEXT_COUNT++;
|
|
59
|
-
GL_CONTEXT_LISTENERS.forEach(
|
|
60
|
-
return cb(GL_CONTEXT_COUNT);
|
|
61
|
-
});
|
|
60
|
+
GL_CONTEXT_LISTENERS.forEach(cb => cb(GL_CONTEXT_COUNT));
|
|
62
61
|
}
|
|
63
|
-
|
|
64
62
|
function deleteGLContext() {
|
|
65
63
|
GL_CONTEXT_COUNT--;
|
|
66
|
-
GL_CONTEXT_LISTENERS.forEach(
|
|
67
|
-
return cb(GL_CONTEXT_COUNT);
|
|
68
|
-
});
|
|
64
|
+
GL_CONTEXT_LISTENERS.forEach(cb => cb(GL_CONTEXT_COUNT));
|
|
69
65
|
}
|
|
70
|
-
|
|
71
66
|
function pushMonitorGLContextCount(cb) {
|
|
72
67
|
GL_CONTEXT_LISTENERS.push(cb);
|
|
73
68
|
}
|
|
74
69
|
function popMonitorGLContextCount(cb) {
|
|
75
70
|
return GL_CONTEXT_LISTENERS.pop();
|
|
76
71
|
}
|
|
77
|
-
|
|
78
72
|
function _preventDefault(e) {
|
|
79
73
|
e.preventDefault();
|
|
80
|
-
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// ----------------------------------------------------------------------------
|
|
81
77
|
// vtkOpenGLRenderWindow methods
|
|
82
78
|
// ----------------------------------------------------------------------------
|
|
83
79
|
|
|
84
|
-
|
|
85
80
|
function vtkOpenGLRenderWindow(publicAPI, model) {
|
|
86
81
|
// Set our className
|
|
87
82
|
model.classHierarchy.push('vtkOpenGLRenderWindow');
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
publicAPI.getViewNodeFactory = function () {
|
|
91
|
-
return model.myFactory;
|
|
92
|
-
}; // prevent default context lost handler
|
|
93
|
-
|
|
83
|
+
const cachingContextHandler = createContextProxyHandler();
|
|
84
|
+
publicAPI.getViewNodeFactory = () => model.myFactory;
|
|
94
85
|
|
|
86
|
+
// prevent default context lost handler
|
|
95
87
|
model.canvas.addEventListener('webglcontextlost', _preventDefault, false);
|
|
96
|
-
model.canvas.addEventListener('webglcontextrestored', publicAPI.restoreContext, false);
|
|
97
|
-
|
|
98
|
-
var previousSize = [0, 0];
|
|
88
|
+
model.canvas.addEventListener('webglcontextrestored', publicAPI.restoreContext, false);
|
|
99
89
|
|
|
90
|
+
// Auto update style
|
|
91
|
+
const previousSize = [0, 0];
|
|
100
92
|
function updateWindow() {
|
|
101
93
|
// Canvas size
|
|
102
94
|
if (model.renderable) {
|
|
@@ -106,163 +98,145 @@ function vtkOpenGLRenderWindow(publicAPI, model) {
|
|
|
106
98
|
model.canvas.setAttribute('width', model.size[0]);
|
|
107
99
|
model.canvas.setAttribute('height', model.size[1]);
|
|
108
100
|
}
|
|
109
|
-
}
|
|
110
|
-
|
|
101
|
+
}
|
|
111
102
|
|
|
103
|
+
// ImageStream size
|
|
112
104
|
if (model.viewStream) {
|
|
113
105
|
// If same size that's a NoOp
|
|
114
106
|
model.viewStream.setSize(model.size[0], model.size[1]);
|
|
115
|
-
}
|
|
116
|
-
|
|
107
|
+
}
|
|
117
108
|
|
|
118
|
-
|
|
109
|
+
// Offscreen ?
|
|
110
|
+
model.canvas.style.display = model.useOffScreen ? 'none' : 'block';
|
|
119
111
|
|
|
112
|
+
// Cursor type
|
|
120
113
|
if (model.el) {
|
|
121
114
|
model.el.style.cursor = model.cursorVisibility ? model.cursor : 'none';
|
|
122
|
-
}
|
|
123
|
-
|
|
115
|
+
}
|
|
124
116
|
|
|
117
|
+
// Invalidate cached DOM container size
|
|
125
118
|
model.containerSize = null;
|
|
126
119
|
}
|
|
120
|
+
publicAPI.onModified(updateWindow);
|
|
127
121
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
publicAPI.buildPass = function (prepass) {
|
|
122
|
+
// Builds myself.
|
|
123
|
+
publicAPI.buildPass = prepass => {
|
|
131
124
|
if (prepass) {
|
|
132
125
|
if (!model.renderable) {
|
|
133
126
|
return;
|
|
134
127
|
}
|
|
135
|
-
|
|
136
128
|
publicAPI.prepareNodes();
|
|
137
129
|
publicAPI.addMissingNodes(model.renderable.getRenderersByReference());
|
|
138
130
|
publicAPI.removeUnusedNodes();
|
|
139
131
|
publicAPI.initialize();
|
|
140
|
-
model.children.forEach(
|
|
132
|
+
model.children.forEach(child => {
|
|
141
133
|
child.setOpenGLRenderWindow(publicAPI);
|
|
142
134
|
});
|
|
143
135
|
}
|
|
144
136
|
};
|
|
145
|
-
|
|
146
|
-
publicAPI.initialize = function () {
|
|
137
|
+
publicAPI.initialize = () => {
|
|
147
138
|
if (!model.initialized) {
|
|
148
139
|
model.context = publicAPI.get3DContext();
|
|
149
140
|
model.textureUnitManager = vtkTextureUnitManager.newInstance();
|
|
150
141
|
model.textureUnitManager.setContext(model.context);
|
|
151
|
-
model.shaderCache.setContext(model.context);
|
|
152
|
-
|
|
153
|
-
|
|
142
|
+
model.shaderCache.setContext(model.context);
|
|
143
|
+
// initialize blending for transparency
|
|
144
|
+
const gl = model.context;
|
|
154
145
|
gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
155
146
|
gl.depthFunc(gl.LEQUAL);
|
|
156
147
|
gl.enable(gl.BLEND);
|
|
157
148
|
model.initialized = true;
|
|
158
149
|
}
|
|
159
150
|
};
|
|
160
|
-
|
|
161
|
-
publicAPI.makeCurrent = function () {
|
|
151
|
+
publicAPI.makeCurrent = () => {
|
|
162
152
|
model.context.makeCurrent();
|
|
163
153
|
};
|
|
164
|
-
|
|
165
|
-
publicAPI.setContainer = function (el) {
|
|
154
|
+
publicAPI.setContainer = el => {
|
|
166
155
|
if (model.el && model.el !== el) {
|
|
167
156
|
if (model.canvas.parentNode !== model.el) {
|
|
168
157
|
vtkErrorMacro('Error: canvas parent node does not match container');
|
|
169
|
-
}
|
|
158
|
+
}
|
|
170
159
|
|
|
160
|
+
// Remove canvas from previous container
|
|
161
|
+
model.el.removeChild(model.canvas);
|
|
171
162
|
|
|
172
|
-
|
|
163
|
+
// If the renderer has previously added
|
|
173
164
|
// a background image, remove it from the DOM.
|
|
174
|
-
|
|
175
165
|
if (model.el.contains(model.bgImage)) {
|
|
176
166
|
model.el.removeChild(model.bgImage);
|
|
177
167
|
}
|
|
178
168
|
}
|
|
179
|
-
|
|
180
169
|
if (model.el !== el) {
|
|
181
170
|
model.el = el;
|
|
182
|
-
|
|
183
171
|
if (model.el) {
|
|
184
|
-
model.el.appendChild(model.canvas);
|
|
185
|
-
// image, attach it to the DOM.
|
|
172
|
+
model.el.appendChild(model.canvas);
|
|
186
173
|
|
|
174
|
+
// If the renderer is set to use a background
|
|
175
|
+
// image, attach it to the DOM.
|
|
187
176
|
if (model.useBackgroundImage) {
|
|
188
177
|
model.el.appendChild(model.bgImage);
|
|
189
178
|
}
|
|
190
|
-
}
|
|
191
|
-
|
|
179
|
+
}
|
|
192
180
|
|
|
181
|
+
// Trigger modified()
|
|
193
182
|
publicAPI.modified();
|
|
194
183
|
}
|
|
195
184
|
};
|
|
196
|
-
|
|
197
|
-
publicAPI.
|
|
198
|
-
return model.el;
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
publicAPI.getContainerSize = function () {
|
|
185
|
+
publicAPI.getContainer = () => model.el;
|
|
186
|
+
publicAPI.getContainerSize = () => {
|
|
202
187
|
if (!model.containerSize && model.el) {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
188
|
+
const {
|
|
189
|
+
width,
|
|
190
|
+
height
|
|
191
|
+
} = model.el.getBoundingClientRect();
|
|
207
192
|
model.containerSize = [width, height];
|
|
208
193
|
}
|
|
209
|
-
|
|
210
194
|
return model.containerSize || model.size;
|
|
211
195
|
};
|
|
212
|
-
|
|
213
|
-
publicAPI.getFramebufferSize = function () {
|
|
196
|
+
publicAPI.getFramebufferSize = () => {
|
|
214
197
|
if (model.activeFramebuffer) {
|
|
215
198
|
return model.activeFramebuffer.getSize();
|
|
216
199
|
}
|
|
217
|
-
|
|
218
200
|
return model.size;
|
|
219
201
|
};
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
var pixels = new Uint8Array((x2 - x1 + 1) * (y2 - y1 + 1) * 4);
|
|
202
|
+
publicAPI.getPixelData = (x1, y1, x2, y2) => {
|
|
203
|
+
const pixels = new Uint8Array((x2 - x1 + 1) * (y2 - y1 + 1) * 4);
|
|
223
204
|
model.context.readPixels(x1, y1, x2 - x1 + 1, y2 - y1 + 1, model.context.RGBA, model.context.UNSIGNED_BYTE, pixels);
|
|
224
205
|
return pixels;
|
|
225
206
|
};
|
|
226
|
-
|
|
227
207
|
publicAPI.get3DContext = function () {
|
|
228
|
-
|
|
208
|
+
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
229
209
|
preserveDrawingBuffer: false,
|
|
230
210
|
depth: true,
|
|
231
211
|
alpha: true,
|
|
232
212
|
powerPreference: 'high-performance'
|
|
233
213
|
};
|
|
234
|
-
|
|
235
|
-
|
|
214
|
+
let result = null;
|
|
215
|
+
const webgl2Supported = typeof WebGL2RenderingContext !== 'undefined';
|
|
236
216
|
model.webgl2 = false;
|
|
237
|
-
|
|
238
217
|
if (model.defaultToWebgl2 && webgl2Supported) {
|
|
239
218
|
result = model.canvas.getContext('webgl2', options);
|
|
240
|
-
|
|
241
219
|
if (result) {
|
|
242
220
|
model.webgl2 = true;
|
|
243
221
|
vtkDebugMacro('using webgl2');
|
|
244
222
|
}
|
|
245
223
|
}
|
|
246
|
-
|
|
247
224
|
if (!result) {
|
|
248
225
|
vtkDebugMacro('using webgl1');
|
|
249
226
|
result = model.canvas.getContext('webgl', options) || model.canvas.getContext('experimental-webgl', options);
|
|
250
227
|
}
|
|
251
|
-
|
|
252
228
|
return new Proxy(result, cachingContextHandler);
|
|
253
|
-
};
|
|
254
|
-
// typically in response to a user request such as a button press
|
|
255
|
-
|
|
229
|
+
};
|
|
256
230
|
|
|
257
|
-
|
|
231
|
+
// Request an XR session on the user device with WebXR,
|
|
232
|
+
// typically in response to a user request such as a button press
|
|
233
|
+
publicAPI.startXR = xrSessionType => {
|
|
258
234
|
if (navigator.xr === undefined) {
|
|
259
235
|
throw new Error('WebXR is not available');
|
|
260
236
|
}
|
|
261
|
-
|
|
262
237
|
model.xrSessionType = xrSessionType !== undefined ? xrSessionType : XrSessionTypes.HmdVR;
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
238
|
+
const isXrSessionAR = [XrSessionTypes.HmdAR, XrSessionTypes.MobileAR].includes(model.xrSessionType);
|
|
239
|
+
const sessionType = isXrSessionAR ? 'immersive-ar' : 'immersive-vr';
|
|
266
240
|
if (!navigator.xr.isSessionSupported(sessionType)) {
|
|
267
241
|
if (isXrSessionAR) {
|
|
268
242
|
throw new Error('Device does not support AR session');
|
|
@@ -270,659 +244,520 @@ function vtkOpenGLRenderWindow(publicAPI, model) {
|
|
|
270
244
|
throw new Error('VR display is not available');
|
|
271
245
|
}
|
|
272
246
|
}
|
|
273
|
-
|
|
274
247
|
if (model.xrSession === null) {
|
|
275
|
-
navigator.xr.requestSession(sessionType).then(publicAPI.enterXR,
|
|
248
|
+
navigator.xr.requestSession(sessionType).then(publicAPI.enterXR, () => {
|
|
276
249
|
throw new Error('Failed to create XR session!');
|
|
277
250
|
});
|
|
278
251
|
} else {
|
|
279
252
|
throw new Error('XR Session already exists!');
|
|
280
253
|
}
|
|
281
|
-
};
|
|
282
|
-
// and request the first animation frame for the device
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
publicAPI.enterXR = /*#__PURE__*/function () {
|
|
286
|
-
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(xrSession) {
|
|
287
|
-
var gl, glLayer, isXrSessionAR, ren;
|
|
288
|
-
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
289
|
-
while (1) {
|
|
290
|
-
switch (_context.prev = _context.next) {
|
|
291
|
-
case 0:
|
|
292
|
-
model.xrSession = xrSession;
|
|
293
|
-
model.oldCanvasSize = model.size.slice();
|
|
294
|
-
|
|
295
|
-
if (!(model.xrSession !== null)) {
|
|
296
|
-
_context.next = 17;
|
|
297
|
-
break;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
gl = publicAPI.get3DContext();
|
|
301
|
-
_context.next = 6;
|
|
302
|
-
return gl.makeXRCompatible();
|
|
303
|
-
|
|
304
|
-
case 6:
|
|
305
|
-
glLayer = new global.XRWebGLLayer(model.xrSession, // constructor needs unproxied context
|
|
306
|
-
gl[GET_UNDERLYING_CONTEXT]());
|
|
307
|
-
publicAPI.setSize(glLayer.framebufferWidth, glLayer.framebufferHeight);
|
|
308
|
-
model.xrSession.updateRenderState({
|
|
309
|
-
baseLayer: glLayer
|
|
310
|
-
});
|
|
311
|
-
model.xrSession.requestReferenceSpace('local').then(function (refSpace) {
|
|
312
|
-
model.xrReferenceSpace = refSpace;
|
|
313
|
-
}); // Initialize transparent background for augmented reality session
|
|
314
|
-
|
|
315
|
-
isXrSessionAR = [XrSessionTypes.HmdAR, XrSessionTypes.MobileAR].includes(model.xrSessionType);
|
|
316
|
-
|
|
317
|
-
if (isXrSessionAR) {
|
|
318
|
-
ren = model.renderable.getRenderers()[0];
|
|
319
|
-
model.preXrSessionBackground = ren.getBackground();
|
|
320
|
-
ren.setBackground([0, 0, 0, 0]);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
publicAPI.resetXRScene();
|
|
324
|
-
model.renderable.getInteractor().switchToXRAnimation();
|
|
325
|
-
model.xrSceneFrame = model.xrSession.requestAnimationFrame(publicAPI.xrRender);
|
|
326
|
-
_context.next = 18;
|
|
327
|
-
break;
|
|
328
|
-
|
|
329
|
-
case 17:
|
|
330
|
-
throw new Error('Failed to enter XR with a null xrSession.');
|
|
331
|
-
|
|
332
|
-
case 18:
|
|
333
|
-
case "end":
|
|
334
|
-
return _context.stop();
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
}, _callee);
|
|
338
|
-
}));
|
|
254
|
+
};
|
|
339
255
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
256
|
+
// When an XR session is available, set up the XRWebGLLayer
|
|
257
|
+
// and request the first animation frame for the device
|
|
258
|
+
publicAPI.enterXR = async xrSession => {
|
|
259
|
+
model.xrSession = xrSession;
|
|
260
|
+
model.oldCanvasSize = model.size.slice();
|
|
261
|
+
if (model.xrSession !== null) {
|
|
262
|
+
const gl = publicAPI.get3DContext();
|
|
263
|
+
await gl.makeXRCompatible();
|
|
264
|
+
const glLayer = new global.XRWebGLLayer(model.xrSession,
|
|
265
|
+
// constructor needs unproxied context
|
|
266
|
+
gl[GET_UNDERLYING_CONTEXT]());
|
|
267
|
+
publicAPI.setSize(glLayer.framebufferWidth, glLayer.framebufferHeight);
|
|
268
|
+
model.xrSession.updateRenderState({
|
|
269
|
+
baseLayer: glLayer
|
|
270
|
+
});
|
|
271
|
+
model.xrSession.requestReferenceSpace('local').then(refSpace => {
|
|
272
|
+
model.xrReferenceSpace = refSpace;
|
|
273
|
+
});
|
|
344
274
|
|
|
275
|
+
// Initialize transparent background for augmented reality session
|
|
276
|
+
const isXrSessionAR = [XrSessionTypes.HmdAR, XrSessionTypes.MobileAR].includes(model.xrSessionType);
|
|
277
|
+
if (isXrSessionAR) {
|
|
278
|
+
const ren = model.renderable.getRenderers()[0];
|
|
279
|
+
model.preXrSessionBackground = ren.getBackground();
|
|
280
|
+
ren.setBackground([0, 0, 0, 0]);
|
|
281
|
+
}
|
|
282
|
+
publicAPI.resetXRScene();
|
|
283
|
+
model.renderable.getInteractor().switchToXRAnimation();
|
|
284
|
+
model.xrSceneFrame = model.xrSession.requestAnimationFrame(publicAPI.xrRender);
|
|
285
|
+
} else {
|
|
286
|
+
throw new Error('Failed to enter XR with a null xrSession.');
|
|
287
|
+
}
|
|
288
|
+
};
|
|
345
289
|
publicAPI.resetXRScene = function () {
|
|
346
|
-
|
|
347
|
-
|
|
290
|
+
let rescaleFactor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_RESET_FACTORS.rescaleFactor;
|
|
291
|
+
let translateZ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_RESET_FACTORS.translateZ;
|
|
348
292
|
// Adjust world-to-physical parameters for different modalities
|
|
349
|
-
|
|
293
|
+
|
|
294
|
+
const ren = model.renderable.getRenderers()[0];
|
|
350
295
|
ren.resetCamera();
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
296
|
+
const camera = ren.getActiveCamera();
|
|
297
|
+
let physicalScale = camera.getPhysicalScale();
|
|
298
|
+
const physicalTranslation = camera.getPhysicalTranslation();
|
|
299
|
+
const rescaledTranslateZ = translateZ * physicalScale;
|
|
355
300
|
physicalScale /= rescaleFactor;
|
|
356
301
|
physicalTranslation[2] += rescaledTranslateZ;
|
|
357
302
|
camera.setPhysicalScale(physicalScale);
|
|
358
|
-
camera.setPhysicalTranslation(physicalTranslation);
|
|
359
|
-
|
|
303
|
+
camera.setPhysicalTranslation(physicalTranslation);
|
|
304
|
+
// Clip at 0.1m, 100.0m in physical space by default
|
|
360
305
|
camera.setClippingRange(0.1 * physicalScale, 100.0 * physicalScale);
|
|
361
306
|
};
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
case 2:
|
|
377
|
-
if (!(model.xrSession !== null)) {
|
|
378
|
-
_context2.next = 10;
|
|
379
|
-
break;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
model.xrSession.cancelAnimationFrame(model.xrSceneFrame);
|
|
383
|
-
model.renderable.getInteractor().returnFromXRAnimation();
|
|
384
|
-
gl = publicAPI.get3DContext();
|
|
385
|
-
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
386
|
-
_context2.next = 9;
|
|
387
|
-
return model.xrSession.end().catch(function (error) {
|
|
388
|
-
if (!(error instanceof DOMException)) {
|
|
389
|
-
throw error;
|
|
390
|
-
}
|
|
391
|
-
});
|
|
392
|
-
|
|
393
|
-
case 9:
|
|
394
|
-
model.xrSession = null;
|
|
395
|
-
|
|
396
|
-
case 10:
|
|
397
|
-
if (model.oldCanvasSize !== undefined) {
|
|
398
|
-
publicAPI.setSize.apply(publicAPI, _toConsumableArray(model.oldCanvasSize));
|
|
399
|
-
} // Reset to default canvas
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
ren = model.renderable.getRenderers()[0];
|
|
403
|
-
|
|
404
|
-
if (model.preXrSessionBackground != null) {
|
|
405
|
-
ren.setBackground(model.preXrSessionBackground);
|
|
406
|
-
model.preXrSessionBackground = null;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
ren.getActiveCamera().setProjectionMatrix(null);
|
|
410
|
-
ren.resetCamera();
|
|
411
|
-
ren.setViewport(0.0, 0, 1.0, 1.0);
|
|
412
|
-
publicAPI.traverseAllPasses();
|
|
413
|
-
|
|
414
|
-
case 17:
|
|
415
|
-
case "end":
|
|
416
|
-
return _context2.stop();
|
|
307
|
+
publicAPI.stopXR = async () => {
|
|
308
|
+
if (navigator.xr === undefined) {
|
|
309
|
+
// WebXR polyfill not available so nothing to do
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
if (model.xrSession !== null) {
|
|
313
|
+
model.xrSession.cancelAnimationFrame(model.xrSceneFrame);
|
|
314
|
+
model.renderable.getInteractor().returnFromXRAnimation();
|
|
315
|
+
const gl = publicAPI.get3DContext();
|
|
316
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
317
|
+
await model.xrSession.end().catch(error => {
|
|
318
|
+
if (!(error instanceof DOMException)) {
|
|
319
|
+
throw error;
|
|
417
320
|
}
|
|
321
|
+
});
|
|
322
|
+
model.xrSession = null;
|
|
323
|
+
}
|
|
324
|
+
if (model.oldCanvasSize !== undefined) {
|
|
325
|
+
publicAPI.setSize(...model.oldCanvasSize);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// Reset to default canvas
|
|
329
|
+
const ren = model.renderable.getRenderers()[0];
|
|
330
|
+
if (model.preXrSessionBackground != null) {
|
|
331
|
+
ren.setBackground(model.preXrSessionBackground);
|
|
332
|
+
model.preXrSessionBackground = null;
|
|
333
|
+
}
|
|
334
|
+
ren.getActiveCamera().setProjectionMatrix(null);
|
|
335
|
+
ren.resetCamera();
|
|
336
|
+
ren.setViewport(0.0, 0, 1.0, 1.0);
|
|
337
|
+
publicAPI.traverseAllPasses();
|
|
338
|
+
};
|
|
339
|
+
publicAPI.xrRender = async (t, frame) => {
|
|
340
|
+
const xrSession = frame.session;
|
|
341
|
+
const isXrSessionHMD = [XrSessionTypes.HmdVR, XrSessionTypes.HmdAR].includes(model.xrSessionType);
|
|
342
|
+
model.renderable.getInteractor().updateXRGamepads(xrSession, frame, model.xrReferenceSpace);
|
|
343
|
+
model.xrSceneFrame = model.xrSession.requestAnimationFrame(publicAPI.xrRender);
|
|
344
|
+
const xrPose = frame.getViewerPose(model.xrReferenceSpace);
|
|
345
|
+
if (xrPose) {
|
|
346
|
+
const gl = publicAPI.get3DContext();
|
|
347
|
+
if (model.xrSessionType === XrSessionTypes.MobileAR && model.oldCanvasSize !== undefined) {
|
|
348
|
+
gl.canvas.width = model.oldCanvasSize[0];
|
|
349
|
+
gl.canvas.height = model.oldCanvasSize[1];
|
|
418
350
|
}
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
gl.canvas.width = model.oldCanvasSize[0];
|
|
440
|
-
gl.canvas.height = model.oldCanvasSize[1];
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
glLayer = xrSession.renderState.baseLayer;
|
|
444
|
-
gl.bindFramebuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
|
|
445
|
-
gl.clear(gl.COLOR_BUFFER_BIT);
|
|
446
|
-
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
447
|
-
publicAPI.setSize(glLayer.framebufferWidth, glLayer.framebufferHeight); // get the first renderer
|
|
448
|
-
|
|
449
|
-
ren = model.renderable.getRenderers()[0]; // Do a render pass for each eye
|
|
450
|
-
|
|
451
|
-
xrPose.views.forEach(function (view, index) {
|
|
452
|
-
var viewport = glLayer.getViewport(view);
|
|
453
|
-
|
|
454
|
-
if (isXrSessionHMD) {
|
|
455
|
-
if (view.eye === 'left') {
|
|
456
|
-
ren.setViewport(0, 0, 0.5, 1.0);
|
|
457
|
-
} else if (view.eye === 'right') {
|
|
458
|
-
ren.setViewport(0.5, 0, 1.0, 1.0);
|
|
459
|
-
} else {
|
|
460
|
-
// No handling for non-eye viewport
|
|
461
|
-
return;
|
|
462
|
-
}
|
|
463
|
-
} else if (model.xrSessionType === XrSessionTypes.LookingGlassVR) {
|
|
464
|
-
var startX = viewport.x / glLayer.framebufferWidth;
|
|
465
|
-
var startY = viewport.y / glLayer.framebufferHeight;
|
|
466
|
-
var endX = (viewport.x + viewport.width) / glLayer.framebufferWidth;
|
|
467
|
-
var endY = (viewport.y + viewport.height) / glLayer.framebufferHeight;
|
|
468
|
-
ren.setViewport(startX, startY, endX, endY);
|
|
469
|
-
} else {
|
|
470
|
-
ren.setViewport(0, 0, 1, 1);
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
ren.getActiveCamera().computeViewParametersFromPhysicalMatrix(view.transform.inverse.matrix);
|
|
474
|
-
ren.getActiveCamera().setProjectionMatrix(view.projectionMatrix);
|
|
475
|
-
publicAPI.traverseAllPasses();
|
|
476
|
-
}); // Reset scissorbox before any subsequent rendering to external displays
|
|
477
|
-
// on frame end, such as rendering to a Looking Glass display.
|
|
478
|
-
|
|
479
|
-
gl.scissor(0, 0, glLayer.framebufferWidth, glLayer.framebufferHeight);
|
|
480
|
-
gl.disable(gl.SCISSOR_TEST);
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
case 6:
|
|
484
|
-
case "end":
|
|
485
|
-
return _context3.stop();
|
|
351
|
+
const glLayer = xrSession.renderState.baseLayer;
|
|
352
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
|
|
353
|
+
gl.clear(gl.COLOR_BUFFER_BIT);
|
|
354
|
+
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
355
|
+
publicAPI.setSize(glLayer.framebufferWidth, glLayer.framebufferHeight);
|
|
356
|
+
|
|
357
|
+
// get the first renderer
|
|
358
|
+
const ren = model.renderable.getRenderers()[0];
|
|
359
|
+
|
|
360
|
+
// Do a render pass for each eye
|
|
361
|
+
xrPose.views.forEach((view, index) => {
|
|
362
|
+
const viewport = glLayer.getViewport(view);
|
|
363
|
+
if (isXrSessionHMD) {
|
|
364
|
+
if (view.eye === 'left') {
|
|
365
|
+
ren.setViewport(0, 0, 0.5, 1.0);
|
|
366
|
+
} else if (view.eye === 'right') {
|
|
367
|
+
ren.setViewport(0.5, 0, 1.0, 1.0);
|
|
368
|
+
} else {
|
|
369
|
+
// No handling for non-eye viewport
|
|
370
|
+
return;
|
|
486
371
|
}
|
|
372
|
+
} else if (model.xrSessionType === XrSessionTypes.LookingGlassVR) {
|
|
373
|
+
const startX = viewport.x / glLayer.framebufferWidth;
|
|
374
|
+
const startY = viewport.y / glLayer.framebufferHeight;
|
|
375
|
+
const endX = (viewport.x + viewport.width) / glLayer.framebufferWidth;
|
|
376
|
+
const endY = (viewport.y + viewport.height) / glLayer.framebufferHeight;
|
|
377
|
+
ren.setViewport(startX, startY, endX, endY);
|
|
378
|
+
} else {
|
|
379
|
+
ren.setViewport(0, 0, 1, 1);
|
|
487
380
|
}
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
return _ref3.apply(this, arguments);
|
|
493
|
-
};
|
|
494
|
-
}();
|
|
381
|
+
ren.getActiveCamera().computeViewParametersFromPhysicalMatrix(view.transform.inverse.matrix);
|
|
382
|
+
ren.getActiveCamera().setProjectionMatrix(view.projectionMatrix);
|
|
383
|
+
publicAPI.traverseAllPasses();
|
|
384
|
+
});
|
|
495
385
|
|
|
496
|
-
|
|
497
|
-
|
|
386
|
+
// Reset scissorbox before any subsequent rendering to external displays
|
|
387
|
+
// on frame end, such as rendering to a Looking Glass display.
|
|
388
|
+
gl.scissor(0, 0, glLayer.framebufferWidth, glLayer.framebufferHeight);
|
|
389
|
+
gl.disable(gl.SCISSOR_TEST);
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
publicAPI.restoreContext = () => {
|
|
393
|
+
const rp = vtkRenderPass.newInstance();
|
|
498
394
|
rp.setCurrentOperation('Release');
|
|
499
395
|
rp.traverse(publicAPI, null);
|
|
500
396
|
};
|
|
501
|
-
|
|
502
|
-
publicAPI.activateTexture = function (texture) {
|
|
397
|
+
publicAPI.activateTexture = texture => {
|
|
503
398
|
// Only add if it isn't already there
|
|
504
|
-
|
|
505
|
-
|
|
399
|
+
const result = model._textureResourceIds.get(texture);
|
|
506
400
|
if (result !== undefined) {
|
|
507
401
|
model.context.activeTexture(model.context.TEXTURE0 + result);
|
|
508
402
|
return;
|
|
509
403
|
}
|
|
510
|
-
|
|
511
|
-
var activeUnit = publicAPI.getTextureUnitManager().allocate();
|
|
512
|
-
|
|
404
|
+
const activeUnit = publicAPI.getTextureUnitManager().allocate();
|
|
513
405
|
if (activeUnit < 0) {
|
|
514
406
|
vtkErrorMacro('Hardware does not support the number of textures defined.');
|
|
515
407
|
return;
|
|
516
408
|
}
|
|
517
|
-
|
|
518
409
|
model._textureResourceIds.set(texture, activeUnit);
|
|
519
|
-
|
|
520
410
|
model.context.activeTexture(model.context.TEXTURE0 + activeUnit);
|
|
521
411
|
};
|
|
522
|
-
|
|
523
|
-
publicAPI.deactivateTexture = function (texture) {
|
|
412
|
+
publicAPI.deactivateTexture = texture => {
|
|
524
413
|
// Only deactivate if it isn't already there
|
|
525
|
-
|
|
526
|
-
|
|
414
|
+
const result = model._textureResourceIds.get(texture);
|
|
527
415
|
if (result !== undefined) {
|
|
528
416
|
publicAPI.getTextureUnitManager().free(result);
|
|
529
|
-
|
|
530
417
|
model._textureResourceIds.delete(texture);
|
|
531
418
|
}
|
|
532
419
|
};
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
var result = model._textureResourceIds.get(texture);
|
|
536
|
-
|
|
420
|
+
publicAPI.getTextureUnitForTexture = texture => {
|
|
421
|
+
const result = model._textureResourceIds.get(texture);
|
|
537
422
|
if (result !== undefined) {
|
|
538
423
|
return result;
|
|
539
424
|
}
|
|
540
|
-
|
|
541
425
|
return -1;
|
|
542
426
|
};
|
|
543
|
-
|
|
544
427
|
publicAPI.getDefaultTextureInternalFormat = function (vtktype, numComps) {
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
428
|
+
let oglNorm16Ext = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
429
|
+
let useHalfFloat = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
548
430
|
if (model.webgl2) {
|
|
549
431
|
switch (vtktype) {
|
|
550
432
|
case VtkDataTypes.UNSIGNED_CHAR:
|
|
551
433
|
switch (numComps) {
|
|
552
434
|
case 1:
|
|
553
435
|
return model.context.R8;
|
|
554
|
-
|
|
555
436
|
case 2:
|
|
556
437
|
return model.context.RG8;
|
|
557
|
-
|
|
558
438
|
case 3:
|
|
559
439
|
return model.context.RGB8;
|
|
560
|
-
|
|
561
440
|
case 4:
|
|
562
441
|
default:
|
|
563
442
|
return model.context.RGBA8;
|
|
564
443
|
}
|
|
565
|
-
|
|
566
444
|
case oglNorm16Ext && !useHalfFloat && VtkDataTypes.UNSIGNED_SHORT:
|
|
567
445
|
switch (numComps) {
|
|
568
446
|
case 1:
|
|
569
447
|
return oglNorm16Ext.R16_EXT;
|
|
570
|
-
|
|
571
448
|
case 2:
|
|
572
449
|
return oglNorm16Ext.RG16_EXT;
|
|
573
|
-
|
|
574
450
|
case 3:
|
|
575
451
|
return oglNorm16Ext.RGB16_EXT;
|
|
576
|
-
|
|
577
452
|
case 4:
|
|
578
453
|
default:
|
|
579
454
|
return oglNorm16Ext.RGBA16_EXT;
|
|
580
455
|
}
|
|
581
|
-
|
|
582
456
|
// prioritize norm16 over float
|
|
583
|
-
|
|
584
457
|
case oglNorm16Ext && !useHalfFloat && VtkDataTypes.SHORT:
|
|
585
458
|
switch (numComps) {
|
|
586
459
|
case 1:
|
|
587
460
|
return oglNorm16Ext.R16_SNORM_EXT;
|
|
588
|
-
|
|
589
461
|
case 2:
|
|
590
462
|
return oglNorm16Ext.RG16_SNORM_EXT;
|
|
591
|
-
|
|
592
463
|
case 3:
|
|
593
464
|
return oglNorm16Ext.RGB16_SNORM_EXT;
|
|
594
|
-
|
|
595
465
|
case 4:
|
|
596
466
|
default:
|
|
597
467
|
return oglNorm16Ext.RGBA16_SNORM_EXT;
|
|
598
468
|
}
|
|
599
|
-
|
|
600
469
|
case VtkDataTypes.FLOAT:
|
|
601
470
|
default:
|
|
602
471
|
switch (numComps) {
|
|
603
472
|
case 1:
|
|
604
473
|
return model.context.R16F;
|
|
605
|
-
|
|
606
474
|
case 2:
|
|
607
475
|
return model.context.RG16F;
|
|
608
|
-
|
|
609
476
|
case 3:
|
|
610
477
|
return model.context.RGB16F;
|
|
611
|
-
|
|
612
478
|
case 4:
|
|
613
479
|
default:
|
|
614
480
|
return model.context.RGBA16F;
|
|
615
481
|
}
|
|
616
|
-
|
|
617
482
|
}
|
|
618
|
-
}
|
|
619
|
-
|
|
483
|
+
}
|
|
620
484
|
|
|
485
|
+
// webgl1 only supports four types
|
|
621
486
|
switch (numComps) {
|
|
622
487
|
case 1:
|
|
623
488
|
return model.context.LUMINANCE;
|
|
624
|
-
|
|
625
489
|
case 2:
|
|
626
490
|
return model.context.LUMINANCE_ALPHA;
|
|
627
|
-
|
|
628
491
|
case 3:
|
|
629
492
|
return model.context.RGB;
|
|
630
|
-
|
|
631
493
|
case 4:
|
|
632
494
|
default:
|
|
633
495
|
return model.context.RGBA;
|
|
634
496
|
}
|
|
635
497
|
};
|
|
636
|
-
|
|
637
|
-
publicAPI.setBackgroundImage = function (img) {
|
|
498
|
+
publicAPI.setBackgroundImage = img => {
|
|
638
499
|
model.bgImage.src = img.src;
|
|
639
500
|
};
|
|
501
|
+
publicAPI.setUseBackgroundImage = value => {
|
|
502
|
+
model.useBackgroundImage = value;
|
|
640
503
|
|
|
641
|
-
|
|
642
|
-
model.useBackgroundImage = value; // Add or remove the background image from the
|
|
504
|
+
// Add or remove the background image from the
|
|
643
505
|
// DOM as specified.
|
|
644
|
-
|
|
645
506
|
if (model.useBackgroundImage && !model.el.contains(model.bgImage)) {
|
|
646
507
|
model.el.appendChild(model.bgImage);
|
|
647
508
|
} else if (!model.useBackgroundImage && model.el.contains(model.bgImage)) {
|
|
648
509
|
model.el.removeChild(model.bgImage);
|
|
649
510
|
}
|
|
650
511
|
};
|
|
651
|
-
|
|
652
512
|
function getCanvasDataURL() {
|
|
653
|
-
|
|
513
|
+
let format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : model.imageFormat;
|
|
654
514
|
// Copy current canvas to not modify the original
|
|
655
|
-
|
|
656
|
-
|
|
515
|
+
const temporaryCanvas = document.createElement('canvas');
|
|
516
|
+
const temporaryContext = temporaryCanvas.getContext('2d');
|
|
657
517
|
temporaryCanvas.width = model.canvas.width;
|
|
658
518
|
temporaryCanvas.height = model.canvas.height;
|
|
659
|
-
temporaryContext.drawImage(model.canvas, 0, 0);
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
renderers.
|
|
665
|
-
|
|
666
|
-
viewProps.
|
|
519
|
+
temporaryContext.drawImage(model.canvas, 0, 0);
|
|
520
|
+
|
|
521
|
+
// Get current client rect to place canvas
|
|
522
|
+
const mainBoundingClientRect = model.canvas.getBoundingClientRect();
|
|
523
|
+
const renderWindow = model.renderable;
|
|
524
|
+
const renderers = renderWindow.getRenderers();
|
|
525
|
+
renderers.forEach(renderer => {
|
|
526
|
+
const viewProps = renderer.getViewProps();
|
|
527
|
+
viewProps.forEach(viewProp => {
|
|
667
528
|
// Check if the prop has a container that should have canvas
|
|
668
529
|
if (viewProp.getContainer) {
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
for (
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
530
|
+
const container = viewProp.getContainer();
|
|
531
|
+
const canvasList = container.getElementsByTagName('canvas');
|
|
532
|
+
// Go throughout all canvas and copy it into temporary main canvas
|
|
533
|
+
for (let i = 0; i < canvasList.length; i++) {
|
|
534
|
+
const currentCanvas = canvasList[i];
|
|
535
|
+
const boundingClientRect = currentCanvas.getBoundingClientRect();
|
|
536
|
+
const newXPosition = boundingClientRect.x - mainBoundingClientRect.x;
|
|
537
|
+
const newYPosition = boundingClientRect.y - mainBoundingClientRect.y;
|
|
677
538
|
temporaryContext.drawImage(currentCanvas, newXPosition, newYPosition);
|
|
678
539
|
}
|
|
679
540
|
}
|
|
680
541
|
});
|
|
681
542
|
});
|
|
682
|
-
|
|
543
|
+
const screenshot = temporaryCanvas.toDataURL(format);
|
|
683
544
|
temporaryCanvas.remove();
|
|
684
545
|
publicAPI.invokeImageReady(screenshot);
|
|
685
546
|
}
|
|
686
|
-
|
|
687
547
|
publicAPI.captureNextImage = function () {
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
size = _ref4$size === void 0 ? null : _ref4$size,
|
|
695
|
-
_ref4$scale = _ref4.scale,
|
|
696
|
-
scale = _ref4$scale === void 0 ? 1 : _ref4$scale;
|
|
697
|
-
|
|
548
|
+
let format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'image/png';
|
|
549
|
+
let {
|
|
550
|
+
resetCamera = false,
|
|
551
|
+
size = null,
|
|
552
|
+
scale = 1
|
|
553
|
+
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
698
554
|
if (model.deleted) {
|
|
699
555
|
return null;
|
|
700
556
|
}
|
|
701
|
-
|
|
702
557
|
model.imageFormat = format;
|
|
703
|
-
|
|
558
|
+
const previous = model.notifyStartCaptureImage;
|
|
704
559
|
model.notifyStartCaptureImage = true;
|
|
705
560
|
model._screenshot = {
|
|
706
|
-
size: !!size || scale !== 1 ? size || model.size.map(
|
|
707
|
-
return val * scale;
|
|
708
|
-
}) : null
|
|
561
|
+
size: !!size || scale !== 1 ? size || model.size.map(val => val * scale) : null
|
|
709
562
|
};
|
|
710
|
-
return new Promise(
|
|
711
|
-
|
|
563
|
+
return new Promise((resolve, reject) => {
|
|
564
|
+
const subscription = publicAPI.onImageReady(imageURL => {
|
|
712
565
|
if (model._screenshot.size === null) {
|
|
713
566
|
model.notifyStartCaptureImage = previous;
|
|
714
567
|
subscription.unsubscribe();
|
|
715
|
-
|
|
716
568
|
if (model._screenshot.placeHolder) {
|
|
717
569
|
// resize the main canvas back to its original size and show it
|
|
718
|
-
model.size = model._screenshot.originalSize;
|
|
570
|
+
model.size = model._screenshot.originalSize;
|
|
719
571
|
|
|
720
|
-
|
|
572
|
+
// process the resize
|
|
573
|
+
publicAPI.modified();
|
|
721
574
|
|
|
575
|
+
// restore the saved camera parameters, if applicable
|
|
722
576
|
if (model._screenshot.cameras) {
|
|
723
|
-
model._screenshot.cameras.forEach(
|
|
724
|
-
|
|
725
|
-
|
|
577
|
+
model._screenshot.cameras.forEach(_ref => {
|
|
578
|
+
let {
|
|
579
|
+
restoreParamsFn,
|
|
580
|
+
arg
|
|
581
|
+
} = _ref;
|
|
726
582
|
return restoreParamsFn(arg);
|
|
727
583
|
});
|
|
728
|
-
}
|
|
729
|
-
|
|
584
|
+
}
|
|
730
585
|
|
|
731
|
-
|
|
586
|
+
// Trigger a render at the original size
|
|
587
|
+
publicAPI.traverseAllPasses();
|
|
732
588
|
|
|
589
|
+
// Remove and clean up the placeholder, revealing the original
|
|
733
590
|
model.el.removeChild(model._screenshot.placeHolder);
|
|
734
|
-
|
|
735
591
|
model._screenshot.placeHolder.remove();
|
|
736
|
-
|
|
737
592
|
model._screenshot = null;
|
|
738
593
|
}
|
|
739
|
-
|
|
740
594
|
resolve(imageURL);
|
|
741
595
|
} else {
|
|
742
596
|
// Create a placeholder image overlay while we resize and render
|
|
743
|
-
|
|
597
|
+
const tmpImg = document.createElement('img');
|
|
744
598
|
tmpImg.style = SCREENSHOT_PLACEHOLDER;
|
|
745
599
|
tmpImg.src = imageURL;
|
|
746
|
-
model._screenshot.placeHolder = model.el.appendChild(tmpImg);
|
|
600
|
+
model._screenshot.placeHolder = model.el.appendChild(tmpImg);
|
|
747
601
|
|
|
748
|
-
|
|
602
|
+
// hide the main canvas
|
|
603
|
+
model.canvas.style.display = 'none';
|
|
749
604
|
|
|
605
|
+
// remember the main canvas original size, then resize it
|
|
750
606
|
model._screenshot.originalSize = model.size;
|
|
751
607
|
model.size = model._screenshot.size;
|
|
752
|
-
model._screenshot.size = null;
|
|
608
|
+
model._screenshot.size = null;
|
|
753
609
|
|
|
610
|
+
// process the resize
|
|
754
611
|
publicAPI.modified();
|
|
755
|
-
|
|
756
612
|
if (resetCamera) {
|
|
757
|
-
|
|
758
|
-
// from all the renderers, so we can restore them later
|
|
613
|
+
const isUserResetCamera = resetCamera !== true;
|
|
759
614
|
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
615
|
+
// If resetCamera was requested, we first save camera parameters
|
|
616
|
+
// from all the renderers, so we can restore them later
|
|
617
|
+
model._screenshot.cameras = model.renderable.getRenderers().map(renderer => {
|
|
618
|
+
const camera = renderer.getActiveCamera();
|
|
619
|
+
const params = camera.get('focalPoint', 'position', 'parallelScale');
|
|
763
620
|
return {
|
|
764
621
|
resetCameraArgs: isUserResetCamera ? {
|
|
765
|
-
renderer
|
|
622
|
+
renderer
|
|
766
623
|
} : undefined,
|
|
767
624
|
resetCameraFn: isUserResetCamera ? resetCamera : renderer.resetCamera,
|
|
768
625
|
restoreParamsFn: camera.set,
|
|
769
626
|
// "clone" the params so we don't keep refs to properties
|
|
770
627
|
arg: JSON.parse(JSON.stringify(params))
|
|
771
628
|
};
|
|
772
|
-
});
|
|
629
|
+
});
|
|
630
|
+
|
|
631
|
+
// Perform the resetCamera() on each renderer only after capturing
|
|
773
632
|
// the params from all active cameras, in case there happen to be
|
|
774
633
|
// linked cameras among the renderers.
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
634
|
+
model._screenshot.cameras.forEach(_ref2 => {
|
|
635
|
+
let {
|
|
636
|
+
resetCameraFn,
|
|
637
|
+
resetCameraArgs
|
|
638
|
+
} = _ref2;
|
|
779
639
|
return resetCameraFn(resetCameraArgs);
|
|
780
640
|
});
|
|
781
|
-
}
|
|
782
|
-
|
|
641
|
+
}
|
|
783
642
|
|
|
643
|
+
// Trigger a render at the custom size
|
|
784
644
|
publicAPI.traverseAllPasses();
|
|
785
645
|
}
|
|
786
646
|
});
|
|
787
647
|
});
|
|
788
648
|
};
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
publicAPI.getHardwareMaximumLineWidth = function () {
|
|
649
|
+
let hardwareMaximumLineWidth;
|
|
650
|
+
publicAPI.getHardwareMaximumLineWidth = () => {
|
|
793
651
|
// We cache the result of this function because `getParameter` is slow
|
|
794
652
|
if (hardwareMaximumLineWidth != null) {
|
|
795
653
|
return hardwareMaximumLineWidth;
|
|
796
654
|
}
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
var lineWidthRange = gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE);
|
|
655
|
+
const gl = publicAPI.get3DContext();
|
|
656
|
+
const lineWidthRange = gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE);
|
|
800
657
|
hardwareMaximumLineWidth = lineWidthRange[1];
|
|
801
658
|
return lineWidthRange[1];
|
|
802
659
|
};
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
var result = {};
|
|
813
|
-
|
|
660
|
+
publicAPI.getGLInformations = () => {
|
|
661
|
+
const gl = publicAPI.get3DContext();
|
|
662
|
+
const glTextureFloat = gl.getExtension('OES_texture_float');
|
|
663
|
+
const glTextureHalfFloat = gl.getExtension('OES_texture_half_float');
|
|
664
|
+
const glDebugRendererInfo = gl.getExtension('WEBGL_debug_renderer_info');
|
|
665
|
+
const glDrawBuffers = gl.getExtension('WEBGL_draw_buffers');
|
|
666
|
+
const glAnisotropic = gl.getExtension('EXT_texture_filter_anisotropic') || gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic');
|
|
667
|
+
const params = [['Max Vertex Attributes', 'MAX_VERTEX_ATTRIBS', gl.getParameter(gl.MAX_VERTEX_ATTRIBS)], ['Max Varying Vectors', 'MAX_VARYING_VECTORS', gl.getParameter(gl.MAX_VARYING_VECTORS)], ['Max Vertex Uniform Vectors', 'MAX_VERTEX_UNIFORM_VECTORS', gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS)], ['Max Fragment Uniform Vectors', 'MAX_FRAGMENT_UNIFORM_VECTORS', gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS)], ['Max Fragment Texture Image Units', 'MAX_TEXTURE_IMAGE_UNITS', gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)], ['Max Vertex Texture Image Units', 'MAX_VERTEX_TEXTURE_IMAGE_UNITS', gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS)], ['Max Combined Texture Image Units', 'MAX_COMBINED_TEXTURE_IMAGE_UNITS', gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS)], ['Max 2D Texture Size', 'MAX_TEXTURE_SIZE', gl.getParameter(gl.MAX_TEXTURE_SIZE)], ['Max Cube Texture Size', 'MAX_CUBE_MAP_TEXTURE_SIZE', gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE)], ['Max Texture Anisotropy', 'MAX_TEXTURE_MAX_ANISOTROPY_EXT', glAnisotropic && gl.getParameter(glAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)], ['Point Size Range', 'ALIASED_POINT_SIZE_RANGE', gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE).join(' - ')], ['Line Width Range', 'ALIASED_LINE_WIDTH_RANGE', gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE).join(' - ')], ['Max Viewport Dimensions', 'MAX_VIEWPORT_DIMS', gl.getParameter(gl.MAX_VIEWPORT_DIMS).join(' - ')], ['Max Renderbuffer Size', 'MAX_RENDERBUFFER_SIZE', gl.getParameter(gl.MAX_RENDERBUFFER_SIZE)], ['Framebuffer Red Bits', 'RED_BITS', gl.getParameter(gl.RED_BITS)], ['Framebuffer Green Bits', 'GREEN_BITS', gl.getParameter(gl.GREEN_BITS)], ['Framebuffer Blue Bits', 'BLUE_BITS', gl.getParameter(gl.BLUE_BITS)], ['Framebuffer Alpha Bits', 'ALPHA_BITS', gl.getParameter(gl.ALPHA_BITS)], ['Framebuffer Depth Bits', 'DEPTH_BITS', gl.getParameter(gl.DEPTH_BITS)], ['Framebuffer Stencil Bits', 'STENCIL_BITS', gl.getParameter(gl.STENCIL_BITS)], ['Framebuffer Subpixel Bits', 'SUBPIXEL_BITS', gl.getParameter(gl.SUBPIXEL_BITS)], ['MSAA Samples', 'SAMPLES', gl.getParameter(gl.SAMPLES)], ['MSAA Sample Buffers', 'SAMPLE_BUFFERS', gl.getParameter(gl.SAMPLE_BUFFERS)], ['Supported Formats for UByte Render Targets ', 'UNSIGNED_BYTE RENDER TARGET FORMATS', [glTextureFloat && checkRenderTargetSupport(gl, gl.RGBA, gl.UNSIGNED_BYTE) ? 'RGBA' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.RGB, gl.UNSIGNED_BYTE) ? 'RGB' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.LUMINANCE, gl.UNSIGNED_BYTE) ? 'LUMINANCE' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.ALPHA, gl.UNSIGNED_BYTE) ? 'ALPHA' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.LUMINANCE_ALPHA, gl.UNSIGNED_BYTE) ? 'LUMINANCE_ALPHA' : ''].join(' ')], ['Supported Formats for Half Float Render Targets', 'HALF FLOAT RENDER TARGET FORMATS', [glTextureHalfFloat && checkRenderTargetSupport(gl, gl.RGBA, glTextureHalfFloat.HALF_FLOAT_OES) ? 'RGBA' : '', glTextureHalfFloat && checkRenderTargetSupport(gl, gl.RGB, glTextureHalfFloat.HALF_FLOAT_OES) ? 'RGB' : '', glTextureHalfFloat && checkRenderTargetSupport(gl, gl.LUMINANCE, glTextureHalfFloat.HALF_FLOAT_OES) ? 'LUMINANCE' : '', glTextureHalfFloat && checkRenderTargetSupport(gl, gl.ALPHA, glTextureHalfFloat.HALF_FLOAT_OES) ? 'ALPHA' : '', glTextureHalfFloat && checkRenderTargetSupport(gl, gl.LUMINANCE_ALPHA, glTextureHalfFloat.HALF_FLOAT_OES) ? 'LUMINANCE_ALPHA' : ''].join(' ')], ['Supported Formats for Full Float Render Targets', 'FLOAT RENDER TARGET FORMATS', [glTextureFloat && checkRenderTargetSupport(gl, gl.RGBA, gl.FLOAT) ? 'RGBA' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.RGB, gl.FLOAT) ? 'RGB' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.LUMINANCE, gl.FLOAT) ? 'LUMINANCE' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.ALPHA, gl.FLOAT) ? 'ALPHA' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.LUMINANCE_ALPHA, gl.FLOAT) ? 'LUMINANCE_ALPHA' : ''].join(' ')], ['Max Multiple Render Targets Buffers', 'MAX_DRAW_BUFFERS_WEBGL', glDrawBuffers ? gl.getParameter(glDrawBuffers.MAX_DRAW_BUFFERS_WEBGL) : 0], ['High Float Precision in Vertex Shader', 'HIGH_FLOAT VERTEX_SHADER', [gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).precision, ' (-2<sup>', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).rangeMin, '</sup> - 2<sup>', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).rangeMax, '</sup>)'].join('')], ['Medium Float Precision in Vertex Shader', 'MEDIUM_FLOAT VERTEX_SHADER', [gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).precision, ' (-2<sup>', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).rangeMin, '</sup> - 2<sup>', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).rangeMax, '</sup>)'].join('')], ['Low Float Precision in Vertex Shader', 'LOW_FLOAT VERTEX_SHADER', [gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT).precision, ' (-2<sup>', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT).rangeMin, '</sup> - 2<sup>', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT).rangeMax, '</sup>)'].join('')], ['High Float Precision in Fragment Shader', 'HIGH_FLOAT FRAGMENT_SHADER', [gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).precision, ' (-2<sup>', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).rangeMin, '</sup> - 2<sup>', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).rangeMax, '</sup>)'].join('')], ['Medium Float Precision in Fragment Shader', 'MEDIUM_FLOAT FRAGMENT_SHADER', [gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).precision, ' (-2<sup>', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).rangeMin, '</sup> - 2<sup>', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).rangeMax, '</sup>)'].join('')], ['Low Float Precision in Fragment Shader', 'LOW_FLOAT FRAGMENT_SHADER', [gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT).precision, ' (-2<sup>', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT).rangeMin, '</sup> - 2<sup>', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT).rangeMax, '</sup>)'].join('')], ['High Int Precision in Vertex Shader', 'HIGH_INT VERTEX_SHADER', [gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_INT).precision, ' (-2<sup>', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_INT).rangeMin, '</sup> - 2<sup>', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_INT).rangeMax, '</sup>)'].join('')], ['Medium Int Precision in Vertex Shader', 'MEDIUM_INT VERTEX_SHADER', [gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_INT).precision, ' (-2<sup>', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_INT).rangeMin, '</sup> - 2<sup>', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_INT).rangeMax, '</sup>)'].join('')], ['Low Int Precision in Vertex Shader', 'LOW_INT VERTEX_SHADER', [gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_INT).precision, ' (-2<sup>', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_INT).rangeMin, '</sup> - 2<sup>', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_INT).rangeMax, '</sup>)'].join('')], ['High Int Precision in Fragment Shader', 'HIGH_INT FRAGMENT_SHADER', [gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_INT).precision, ' (-2<sup>', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_INT).rangeMin, '</sup> - 2<sup>', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_INT).rangeMax, '</sup>)'].join('')], ['Medium Int Precision in Fragment Shader', 'MEDIUM_INT FRAGMENT_SHADER', [gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_INT).precision, ' (-2<sup>', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_INT).rangeMin, '</sup> - 2<sup>', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_INT).rangeMax, '</sup>)'].join('')], ['Low Int Precision in Fragment Shader', 'LOW_INT FRAGMENT_SHADER', [gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_INT).precision, ' (-2<sup>', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_INT).rangeMin, '</sup> - 2<sup>', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_INT).rangeMax, '</sup>)'].join('')], ['Supported Extensions', 'EXTENSIONS', gl.getSupportedExtensions().join('<br/>\t\t\t\t\t ')], ['WebGL Renderer', 'RENDERER', gl.getParameter(gl.RENDERER)], ['WebGL Vendor', 'VENDOR', gl.getParameter(gl.VENDOR)], ['WebGL Version', 'VERSION', gl.getParameter(gl.VERSION)], ['Shading Language Version', 'SHADING_LANGUAGE_VERSION', gl.getParameter(gl.SHADING_LANGUAGE_VERSION)], ['Unmasked Renderer', 'UNMASKED_RENDERER', glDebugRendererInfo && gl.getParameter(glDebugRendererInfo.UNMASKED_RENDERER_WEBGL)], ['Unmasked Vendor', 'UNMASKED_VENDOR', glDebugRendererInfo && gl.getParameter(glDebugRendererInfo.UNMASKED_VENDOR_WEBGL)], ['WebGL Version', 'WEBGL_VERSION', model.webgl2 ? 2 : 1]];
|
|
668
|
+
const result = {};
|
|
814
669
|
while (params.length) {
|
|
815
|
-
|
|
816
|
-
_params$pop2 = _slicedToArray(_params$pop, 3),
|
|
817
|
-
label = _params$pop2[0],
|
|
818
|
-
key = _params$pop2[1],
|
|
819
|
-
value = _params$pop2[2];
|
|
820
|
-
|
|
670
|
+
const [label, key, value] = params.pop();
|
|
821
671
|
if (key) {
|
|
822
672
|
result[key] = {
|
|
823
|
-
label
|
|
824
|
-
value
|
|
673
|
+
label,
|
|
674
|
+
value
|
|
825
675
|
};
|
|
826
676
|
}
|
|
827
677
|
}
|
|
828
|
-
|
|
829
678
|
return result;
|
|
830
679
|
};
|
|
831
|
-
|
|
832
|
-
publicAPI.traverseAllPasses = function () {
|
|
680
|
+
publicAPI.traverseAllPasses = () => {
|
|
833
681
|
if (model.renderPasses) {
|
|
834
|
-
for (
|
|
682
|
+
for (let index = 0; index < model.renderPasses.length; ++index) {
|
|
835
683
|
model.renderPasses[index].traverse(publicAPI, null);
|
|
836
684
|
}
|
|
837
685
|
}
|
|
838
|
-
|
|
839
686
|
if (model.notifyStartCaptureImage) {
|
|
840
687
|
getCanvasDataURL();
|
|
841
688
|
}
|
|
842
689
|
};
|
|
843
|
-
|
|
844
|
-
publicAPI.disableCullFace = function () {
|
|
690
|
+
publicAPI.disableCullFace = () => {
|
|
845
691
|
if (model.cullFaceEnabled) {
|
|
846
692
|
model.context.disable(model.context.CULL_FACE);
|
|
847
693
|
model.cullFaceEnabled = false;
|
|
848
694
|
}
|
|
849
695
|
};
|
|
850
|
-
|
|
851
|
-
publicAPI.enableCullFace = function () {
|
|
696
|
+
publicAPI.enableCullFace = () => {
|
|
852
697
|
if (!model.cullFaceEnabled) {
|
|
853
698
|
model.context.enable(model.context.CULL_FACE);
|
|
854
699
|
model.cullFaceEnabled = true;
|
|
855
700
|
}
|
|
856
701
|
};
|
|
857
|
-
|
|
858
|
-
publicAPI.setViewStream = function (stream) {
|
|
702
|
+
publicAPI.setViewStream = stream => {
|
|
859
703
|
if (model.viewStream === stream) {
|
|
860
704
|
return false;
|
|
861
705
|
}
|
|
862
|
-
|
|
863
706
|
if (model.subscription) {
|
|
864
707
|
model.subscription.unsubscribe();
|
|
865
708
|
model.subscription = null;
|
|
866
709
|
}
|
|
867
|
-
|
|
868
710
|
model.viewStream = stream;
|
|
869
|
-
|
|
870
711
|
if (model.viewStream) {
|
|
871
712
|
// Force background to be transparent + render
|
|
872
|
-
|
|
873
|
-
mainRenderer.getBackgroundByReference()[3] = 0;
|
|
713
|
+
const mainRenderer = model.renderable.getRenderers()[0];
|
|
714
|
+
mainRenderer.getBackgroundByReference()[3] = 0;
|
|
874
715
|
|
|
875
|
-
|
|
716
|
+
// Enable display of the background image
|
|
717
|
+
publicAPI.setUseBackgroundImage(true);
|
|
876
718
|
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
});
|
|
719
|
+
// Bind to remote stream
|
|
720
|
+
model.subscription = model.viewStream.onImageReady(e => publicAPI.setBackgroundImage(e.image));
|
|
880
721
|
model.viewStream.setSize(model.size[0], model.size[1]);
|
|
881
722
|
model.viewStream.invalidateCache();
|
|
882
723
|
model.viewStream.render();
|
|
883
724
|
publicAPI.modified();
|
|
884
725
|
}
|
|
885
|
-
|
|
886
726
|
return true;
|
|
887
727
|
};
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
var ret = vtkHardwareSelector.newInstance();
|
|
728
|
+
publicAPI.createSelector = () => {
|
|
729
|
+
const ret = vtkHardwareSelector.newInstance();
|
|
891
730
|
ret.setOpenGLRenderWindow(publicAPI);
|
|
892
731
|
return ret;
|
|
893
732
|
};
|
|
894
|
-
|
|
895
733
|
function clearEvents() {
|
|
896
734
|
model.canvas.removeEventListener('webglcontextlost', _preventDefault);
|
|
897
735
|
model.canvas.removeEventListener('webglcontextrestored', publicAPI.restoreContext);
|
|
898
736
|
}
|
|
737
|
+
publicAPI.delete = macro.chain(clearEvents, publicAPI.delete, publicAPI.setViewStream, deleteGLContext);
|
|
899
738
|
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
publicAPI.setActiveFramebuffer = function (newActiveFramebuffer) {
|
|
739
|
+
// Do not trigger modified for performance reasons
|
|
740
|
+
publicAPI.setActiveFramebuffer = newActiveFramebuffer => {
|
|
903
741
|
model.activeFramebuffer = newActiveFramebuffer;
|
|
904
742
|
};
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
publicAPI.setSize = function (width, height) {
|
|
909
|
-
var modified = superSetSize(width, height);
|
|
910
|
-
|
|
743
|
+
const superSetSize = publicAPI.setSize;
|
|
744
|
+
publicAPI.setSize = (width, height) => {
|
|
745
|
+
const modified = superSetSize(width, height);
|
|
911
746
|
if (modified) {
|
|
912
747
|
publicAPI.invokeWindowResizeEvent({
|
|
913
|
-
width
|
|
914
|
-
height
|
|
748
|
+
width,
|
|
749
|
+
height
|
|
915
750
|
});
|
|
916
751
|
}
|
|
917
|
-
|
|
918
752
|
return modified;
|
|
919
753
|
};
|
|
920
|
-
}
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
// ----------------------------------------------------------------------------
|
|
921
757
|
// Object factory
|
|
922
758
|
// ----------------------------------------------------------------------------
|
|
923
759
|
|
|
924
|
-
|
|
925
|
-
var DEFAULT_VALUES = {
|
|
760
|
+
const DEFAULT_VALUES = {
|
|
926
761
|
cullFaceEnabled: false,
|
|
927
762
|
shaderCache: null,
|
|
928
763
|
initialized: false,
|
|
@@ -945,24 +780,27 @@ var DEFAULT_VALUES = {
|
|
|
945
780
|
imageFormat: 'image/png',
|
|
946
781
|
useOffScreen: false,
|
|
947
782
|
useBackgroundImage: false
|
|
948
|
-
};
|
|
783
|
+
};
|
|
784
|
+
|
|
785
|
+
// ----------------------------------------------------------------------------
|
|
949
786
|
|
|
950
787
|
function extend(publicAPI, model) {
|
|
951
|
-
|
|
952
|
-
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
788
|
+
let initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
789
|
+
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
953
790
|
|
|
954
|
-
|
|
791
|
+
// Inheritance
|
|
792
|
+
vtkRenderWindowViewNode.extend(publicAPI, model, initialValues);
|
|
955
793
|
|
|
794
|
+
// Create internal instances
|
|
956
795
|
model.canvas = document.createElement('canvas');
|
|
957
796
|
model.canvas.style.width = '100%';
|
|
958
797
|
createGLContext();
|
|
959
|
-
|
|
960
798
|
if (!model.selector) {
|
|
961
799
|
model.selector = vtkHardwareSelector.newInstance();
|
|
962
800
|
model.selector.setOpenGLRenderWindow(publicAPI);
|
|
963
|
-
}
|
|
964
|
-
|
|
801
|
+
}
|
|
965
802
|
|
|
803
|
+
// Create internal bgImage
|
|
966
804
|
model.bgImage = new Image();
|
|
967
805
|
model.bgImage.style.position = 'absolute';
|
|
968
806
|
model.bgImage.style.left = '0';
|
|
@@ -973,35 +811,43 @@ function extend(publicAPI, model) {
|
|
|
973
811
|
model._textureResourceIds = new Map();
|
|
974
812
|
model.myFactory = vtkViewNodeFactory.newInstance();
|
|
975
813
|
/* eslint-disable no-use-before-define */
|
|
976
|
-
|
|
977
814
|
model.myFactory.registerOverride('vtkRenderWindow', newInstance);
|
|
978
815
|
/* eslint-enable no-use-before-define */
|
|
979
816
|
|
|
980
817
|
model.shaderCache = vtkShaderCache.newInstance();
|
|
981
|
-
model.shaderCache.setOpenGLRenderWindow(publicAPI);
|
|
818
|
+
model.shaderCache.setOpenGLRenderWindow(publicAPI);
|
|
982
819
|
|
|
820
|
+
// setup default forward pass rendering
|
|
983
821
|
model.renderPasses[0] = vtkForwardPass.newInstance();
|
|
984
|
-
macro.event(publicAPI, model, 'imageReady');
|
|
822
|
+
macro.event(publicAPI, model, 'imageReady');
|
|
985
823
|
|
|
824
|
+
// Build VTK API
|
|
986
825
|
macro.get(publicAPI, model, ['shaderCache', 'textureUnitManager', 'webgl2', 'vrDisplay', 'useBackgroundImage', 'xrSupported', 'activeFramebuffer']);
|
|
987
826
|
macro.setGet(publicAPI, model, ['initialized', 'context', 'canvas', 'renderPasses', 'notifyStartCaptureImage', 'defaultToWebgl2', 'cursor', 'useOffScreen']);
|
|
988
827
|
macro.setGetArray(publicAPI, model, ['size'], 2);
|
|
989
|
-
macro.event(publicAPI, model, 'windowResizeEvent');
|
|
828
|
+
macro.event(publicAPI, model, 'windowResizeEvent');
|
|
990
829
|
|
|
830
|
+
// Object methods
|
|
991
831
|
vtkOpenGLRenderWindow(publicAPI, model);
|
|
992
|
-
}
|
|
832
|
+
}
|
|
993
833
|
|
|
994
|
-
|
|
834
|
+
// ----------------------------------------------------------------------------
|
|
835
|
+
|
|
836
|
+
const newInstance = macro.newInstance(extend, 'vtkOpenGLRenderWindow');
|
|
837
|
+
|
|
838
|
+
// ----------------------------------------------------------------------------
|
|
995
839
|
// Register API specific RenderWindow implementation
|
|
996
840
|
// ----------------------------------------------------------------------------
|
|
997
841
|
|
|
998
|
-
registerViewConstructor('WebGL', newInstance);
|
|
842
|
+
registerViewConstructor('WebGL', newInstance);
|
|
843
|
+
|
|
844
|
+
// ----------------------------------------------------------------------------
|
|
999
845
|
|
|
1000
846
|
var vtkRenderWindow = {
|
|
1001
|
-
newInstance
|
|
1002
|
-
extend
|
|
1003
|
-
pushMonitorGLContextCount
|
|
1004
|
-
popMonitorGLContextCount
|
|
847
|
+
newInstance,
|
|
848
|
+
extend,
|
|
849
|
+
pushMonitorGLContextCount,
|
|
850
|
+
popMonitorGLContextCount
|
|
1005
851
|
};
|
|
1006
852
|
|
|
1007
853
|
export { vtkRenderWindow as default, extend, newInstance, popMonitorGLContextCount, pushMonitorGLContextCount };
|