@kitware/vtk.js 24.5.0 → 24.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/Common/Core/Base64.d.ts +4 -2
  2. package/Common/Core/CellArray.d.ts +2 -2
  3. package/Common/Core/DataArray.d.ts +2 -2
  4. package/Common/Core/Endian.d.ts +1 -1
  5. package/Common/Core/ImageHelper.d.ts +1 -1
  6. package/Common/Core/LookupTable.d.ts +1 -1
  7. package/Common/Core/Math.d.ts +1 -1
  8. package/Common/Core/MatrixBuilder.d.ts +1 -1
  9. package/Common/Core/Points.d.ts +2 -2
  10. package/Common/Core/PriorityQueue.d.ts +1 -1
  11. package/Common/Core/ProgressHandler.d.ts +1 -1
  12. package/Common/Core/ScalarsToColors.d.ts +3 -3
  13. package/Common/Core/StringArray.d.ts +1 -1
  14. package/Common/Core/VariantArray.d.ts +1 -1
  15. package/Common/DataModel/Box.d.ts +2 -2
  16. package/Common/DataModel/CardinalSpline1D.d.ts +1 -1
  17. package/Common/DataModel/Cell.d.ts +3 -3
  18. package/Common/DataModel/Cone.d.ts +2 -2
  19. package/Common/DataModel/Cylinder.d.ts +2 -2
  20. package/Common/DataModel/DataSet.d.ts +1 -1
  21. package/Common/DataModel/DataSetAttributes/FieldData.d.ts +4 -2
  22. package/Common/DataModel/DataSetAttributes.d.ts +3 -3
  23. package/Common/DataModel/ImageData.d.ts +1 -1
  24. package/Common/DataModel/Line.d.ts +1 -1
  25. package/Common/DataModel/PiecewiseFunction.d.ts +2 -2
  26. package/Common/DataModel/Plane.d.ts +2 -2
  27. package/Common/DataModel/PointSet.d.ts +2 -2
  28. package/Common/DataModel/PolyData.d.ts +2 -2
  29. package/Common/DataModel/Polygon.d.ts +2 -2
  30. package/Common/DataModel/SelectionNode.d.ts +2 -2
  31. package/Common/DataModel/Sphere.d.ts +2 -2
  32. package/Common/DataModel/Spline1D.d.ts +1 -1
  33. package/Common/DataModel/Spline3D.d.ts +1 -1
  34. package/Common/DataModel/Triangle.d.ts +1 -1
  35. package/Common/Transform/LandmarkTransform.d.ts +2 -2
  36. package/Filters/General/AppendPolyData.d.ts +1 -1
  37. package/Filters/General/ImageCropFilter.d.ts +1 -1
  38. package/Filters/General/ImageOutlineFilter.d.ts +1 -1
  39. package/Filters/General/ImageSliceFilter.d.ts +1 -1
  40. package/Filters/General/ImageStreamline.d.ts +3 -3
  41. package/Filters/General/LineFilter.d.ts +1 -1
  42. package/Filters/General/OutlineFilter.d.ts +1 -1
  43. package/Filters/General/TriangleFilter.d.ts +1 -1
  44. package/Filters/General/TubeFilter.d.ts +2 -2
  45. package/Filters/Sources/Arrow2DSource.d.ts +2 -2
  46. package/Filters/Sources/ArrowSource.d.ts +2 -2
  47. package/Filters/Sources/CircleSource.d.ts +2 -2
  48. package/Filters/Sources/ConeSource.d.ts +2 -2
  49. package/Filters/Sources/CubeSource.d.ts +2 -2
  50. package/Filters/Sources/Cursor3D.d.ts +3 -3
  51. package/Filters/Sources/CylinderSource.d.ts +2 -2
  52. package/Filters/Sources/LineSource.d.ts +2 -2
  53. package/Filters/Sources/PlaneSource.d.ts +2 -2
  54. package/Filters/Sources/PointSource.d.ts +2 -2
  55. package/Filters/Sources/SphereSource.d.ts +2 -2
  56. package/Filters/Texture/TextureMapToPlane.d.ts +1 -1
  57. package/Filters/Texture/TextureMapToSphere.d.ts +1 -1
  58. package/IO/Core/DataAccessHelper.d.ts +4 -4
  59. package/IO/Core/HttpDataSetReader.d.ts +1 -1
  60. package/IO/Core/HttpSceneLoader.d.ts +5 -5
  61. package/IO/Core/ImageStream/DefaultProtocol.d.ts +1 -1
  62. package/IO/Core/ImageStream/ViewStream.d.ts +4 -4
  63. package/IO/Core/ImageStream.d.ts +3 -3
  64. package/IO/Core/WSLinkClient.d.ts +1 -1
  65. package/IO/Geometry/DracoReader.d.ts +5 -5
  66. package/IO/Geometry/PLYReader.d.ts +5 -5
  67. package/IO/Geometry/PLYWriter.d.ts +2 -2
  68. package/IO/Geometry/STLReader.d.ts +5 -5
  69. package/IO/Geometry/STLWriter.d.ts +2 -2
  70. package/IO/Misc/ElevationReader.d.ts +5 -5
  71. package/IO/Misc/ITKImageReader.d.ts +1 -1
  72. package/IO/Misc/ITKPolyDataReader.d.ts +1 -1
  73. package/IO/Misc/JSONNucleoReader.d.ts +5 -5
  74. package/IO/Misc/JSONReader.d.ts +1 -1
  75. package/IO/Misc/MTLReader.d.ts +6 -6
  76. package/IO/Misc/OBJReader.d.ts +5 -5
  77. package/IO/Misc/PDBReader.d.ts +5 -5
  78. package/IO/XML/XMLReader.d.ts +5 -5
  79. package/Interaction/Widgets/OrientationMarkerWidget.d.ts +6 -6
  80. package/Rendering/Core/AbstractMapper.d.ts +2 -2
  81. package/Rendering/Core/AbstractMapper3D.d.ts +1 -1
  82. package/Rendering/Core/AbstractPicker.d.ts +2 -2
  83. package/Rendering/Core/Actor.d.ts +1 -1
  84. package/Rendering/Core/Actor2D.d.ts +1 -1
  85. package/Rendering/Core/Camera.d.ts +2 -2
  86. package/Rendering/Core/CellPicker.d.ts +2 -2
  87. package/Rendering/Core/ColorTransferFunction.d.ts +1 -1
  88. package/Rendering/Core/Coordinate.d.ts +1 -1
  89. package/Rendering/Core/Glyph3DMapper.d.ts +1 -1
  90. package/Rendering/Core/ImageMapper.d.ts +1 -1
  91. package/Rendering/Core/ImageProperty.d.ts +1 -1
  92. package/Rendering/Core/ImageSlice.d.ts +1 -1
  93. package/Rendering/Core/Light.d.ts +2 -2
  94. package/Rendering/Core/Mapper.d.ts +1 -1
  95. package/Rendering/Core/Mapper2D.d.ts +1 -1
  96. package/Rendering/Core/Picker.d.ts +1 -1
  97. package/Rendering/Core/PointPicker.d.ts +1 -1
  98. package/Rendering/Core/Prop.d.ts +1 -1
  99. package/Rendering/Core/Prop3D.d.ts +1 -1
  100. package/Rendering/Core/Property.d.ts +2 -2
  101. package/Rendering/Core/Property2D.d.ts +2 -2
  102. package/Rendering/Core/RenderWindow.d.ts +2 -2
  103. package/Rendering/Core/RenderWindowInteractor.d.ts +123 -109
  104. package/Rendering/Core/Renderer.d.ts +1 -1
  105. package/Rendering/Core/ScalarBarActor.d.ts +2 -2
  106. package/Rendering/Core/ScalarBarActor.js +2 -2
  107. package/Rendering/Core/Texture.d.ts +1 -1
  108. package/Rendering/Core/Viewport.d.ts +2 -2
  109. package/Rendering/Core/Volume.d.ts +1 -1
  110. package/Rendering/Core/VolumeMapper.d.ts +1 -1
  111. package/Rendering/Core/VolumeProperty.d.ts +1 -1
  112. package/Rendering/Misc/CanvasView.d.ts +2 -2
  113. package/Rendering/Misc/FullScreenRenderWindow.d.ts +8 -8
  114. package/Rendering/Misc/GenericRenderWindow.d.ts +6 -6
  115. package/Rendering/Misc/RemoteView.d.ts +2 -2
  116. package/Rendering/Misc/RenderWindowWithControlBar.d.ts +1 -1
  117. package/Rendering/Misc/SynchronizableRenderWindow.d.ts +2 -2
  118. package/Rendering/Misc/TextureLODsDownloader.d.ts +3 -3
  119. package/Rendering/OpenGL/OrderIndependentTranslucentPass.js +5 -1
  120. package/Rendering/OpenGL/RenderWindow.d.ts +7 -7
  121. package/Rendering/SceneGraph/RenderPass.d.ts +1 -1
  122. package/Rendering/SceneGraph/ViewNode.d.ts +1 -1
  123. package/Rendering/SceneGraph/ViewNode.js +28 -2
  124. package/Rendering/SceneGraph/ViewNodeFactory.d.ts +1 -1
  125. package/Rendering/WebGPU/CellArrayMapper.js +629 -0
  126. package/Rendering/WebGPU/FullScreenQuad.js +4 -6
  127. package/Rendering/WebGPU/Glyph3DMapper.js +60 -27
  128. package/Rendering/WebGPU/ImageMapper.js +23 -60
  129. package/Rendering/WebGPU/OrderIndependentTranslucentPass.js +4 -6
  130. package/Rendering/WebGPU/Pipeline.js +12 -0
  131. package/Rendering/WebGPU/PolyDataMapper.js +49 -623
  132. package/Rendering/WebGPU/RenderEncoder.js +34 -0
  133. package/Rendering/WebGPU/Renderer.js +4 -62
  134. package/Rendering/WebGPU/ShaderDescription.js +6 -6
  135. package/Rendering/WebGPU/{MapperHelper.js → SimpleMapper.js} +64 -38
  136. package/Rendering/WebGPU/SphereMapper.js +41 -37
  137. package/Rendering/WebGPU/StickMapper.js +35 -30
  138. package/Rendering/WebGPU/StorageBuffer.js +2 -2
  139. package/Rendering/WebGPU/UniformBuffer.js +1 -1
  140. package/Rendering/WebGPU/Volume.js +1 -14
  141. package/Rendering/WebGPU/VolumePass.js +15 -19
  142. package/Rendering/WebGPU/VolumePassFSQ.js +19 -25
  143. package/Widgets/Manipulators/LineManipulator.d.ts +1 -1
  144. package/Widgets/Manipulators/PlaneManipulator.d.ts +1 -1
  145. package/Widgets/Manipulators/TrackballManipulator.d.ts +1 -1
  146. package/Widgets/Representations/WidgetRepresentation.d.ts +1 -1
  147. package/Widgets/Widgets3D/SphereWidget.d.ts +2 -2
  148. package/_virtual/rollup-plugin-web-worker-loader__helper__funcToSource.js +8 -8
  149. package/interfaces.d.ts +2 -2
  150. package/macros.d.ts +1 -1
  151. package/package.json +1 -1
  152. package/types.d.ts +1 -1
  153. package/tsconfig.json +0 -8
@@ -1,21 +1,18 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import { newInstance as newInstance$1, obj } from '../../macros.js';
3
+ import vtkWebGPUCellArrayMapper from './CellArrayMapper.js';
3
4
  import vtkWebGPUPolyDataMapper from './PolyDataMapper.js';
4
5
  import vtkWebGPUStorageBuffer from './StorageBuffer.js';
5
6
  import vtkWebGPUShaderCache from './ShaderCache.js';
6
- import vtkWebGPUBufferManager from './BufferManager.js';
7
7
  import { registerOverride } from './ViewNodeFactory.js';
8
8
 
9
9
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10
10
 
11
11
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12
- var PrimitiveTypes = vtkWebGPUBufferManager.PrimitiveTypes; // ----------------------------------------------------------------------------
13
- // vtkWebGPUSphereMapper methods
14
- // ----------------------------------------------------------------------------
15
12
 
16
- function vtkWebGPUGlyph3DMapper(publicAPI, model) {
13
+ function vtkWebGPUGlyph3DCellArrayMapper(publicAPI, model) {
17
14
  // Set our className
18
- model.classHierarchy.push('vtkWebGPUGlyph3DMapper'); // Capture 'parentClass' api for internal use
15
+ model.classHierarchy.push('vtkWebGPUGlyph3DCellArrayMapper');
19
16
 
20
17
  var superClass = _objectSpread({}, publicAPI);
21
18
 
@@ -28,6 +25,8 @@ function vtkWebGPUGlyph3DMapper(publicAPI, model) {
28
25
  vDesc.setCode(code);
29
26
  };
30
27
 
28
+ model.shaderReplacements.set('replaceShaderPosition', publicAPI.replaceShaderPosition);
29
+
31
30
  publicAPI.replaceShaderNormal = function (hash, pipeline, vertexInput) {
32
31
  if (vertexInput.hasAttribute('normalMC')) {
33
32
  var vDesc = pipeline.getShaderDescription('vertex');
@@ -39,8 +38,10 @@ function vtkWebGPUGlyph3DMapper(publicAPI, model) {
39
38
  superClass.replaceShaderNormal(hash, pipeline, vertexInput);
40
39
  };
41
40
 
41
+ model.shaderReplacements.set('replaceShaderNormal', publicAPI.replaceShaderNormal);
42
+
42
43
  publicAPI.replaceShaderColor = function (hash, pipeline, vertexInput) {
43
- if (!model.carray) {
44
+ if (!model.renderable.getColorArray()) {
44
45
  superClass.replaceShaderColor(hash, pipeline, vertexInput);
45
46
  return;
46
47
  }
@@ -56,6 +57,8 @@ function vtkWebGPUGlyph3DMapper(publicAPI, model) {
56
57
  fDesc.setCode(code);
57
58
  };
58
59
 
60
+ model.shaderReplacements.set('replaceShaderColor', publicAPI.replaceShaderColor);
61
+
59
62
  publicAPI.replaceShaderSelect = function (hash, pipeline, vertexInput) {
60
63
  if (hash.includes('sel')) {
61
64
  var vDesc = pipeline.getShaderDescription('vertex');
@@ -70,21 +73,67 @@ function vtkWebGPUGlyph3DMapper(publicAPI, model) {
70
73
  }
71
74
  };
72
75
 
73
- publicAPI.buildPrimitives = function () {
76
+ model.shaderReplacements.set('replaceShaderSelect', publicAPI.replaceShaderSelect);
77
+ } // ----------------------------------------------------------------------------
78
+
79
+
80
+ function caExtend(publicAPI, model) {
81
+ var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
82
+ Object.assign(model, {}, initialValues); // Inheritance
83
+
84
+ vtkWebGPUCellArrayMapper.extend(publicAPI, model, initialValues); // Object methods
85
+
86
+ vtkWebGPUGlyph3DCellArrayMapper(publicAPI, model);
87
+ }
88
+ var caNewInstance = newInstance$1(caExtend, 'vtkWebGPUGlyph3DCellArrayMapper'); // ----------------------------------------------------------------------------
89
+ // vtkWebGPUSphereMapper methods
90
+ // ----------------------------------------------------------------------------
91
+
92
+ function vtkWebGPUGlyph3DMapper(publicAPI, model) {
93
+ // Set our className
94
+ model.classHierarchy.push('vtkWebGPUGlyph3DMapper');
95
+
96
+ publicAPI.createCellArrayMapper = function () {
97
+ var mpr = caNewInstance();
98
+ mpr.setSSBO(model.SSBO);
99
+ mpr.setRenderable(model.renderable);
100
+ return mpr;
101
+ };
102
+
103
+ publicAPI.buildPass = function (prepass) {
104
+ if (prepass) {
105
+ if (!model.renderable.getStatic()) {
106
+ model.renderable.update();
107
+ }
108
+
109
+ var gpoly = model.renderable.getInputData(1);
110
+ model.renderable.mapScalars(gpoly, 1.0);
111
+ publicAPI.updateSSBO();
112
+ publicAPI.updateCellArrayMappers(gpoly);
113
+
114
+ for (var i = 0; i < model.children.length; i++) {
115
+ var cellMapper = model.children[i];
116
+ cellMapper.setNumberOfInstances(model.numInstances);
117
+ }
118
+ }
119
+ };
120
+
121
+ publicAPI.updateSSBO = function () {
74
122
  model.currentInput = model.renderable.getInputData(1);
75
123
  model.renderable.buildArrays(); // update the buffer objects if needed
76
124
 
77
125
  var garray = model.renderable.getMatrixArray();
78
126
  var narray = model.renderable.getNormalArray();
79
127
  model.carray = model.renderable.getColorArray();
80
- var numInstances = garray.length / 16;
128
+ model.numInstances = garray.length / 16;
81
129
 
82
130
  if (model.renderable.getBuildTime().getMTime() > model.glyphBOBuildTime.getMTime()) {
83
131
  // In Core class all arrays are rebuilt when this happens
84
132
  // but these arrays can be shared between all primType
133
+ model.WebGPURenderWindow = publicAPI.getFirstAncestorOfType('vtkWebGPURenderWindow');
85
134
  var device = model.WebGPURenderWindow.getDevice();
86
135
  model.SSBO.clearData();
87
- model.SSBO.setNumberOfInstances(numInstances);
136
+ model.SSBO.setNumberOfInstances(model.numInstances);
88
137
  model.SSBO.addEntry('matrix', 'mat4x4<f32>');
89
138
  model.SSBO.addEntry('normal', 'mat4x4<f32>');
90
139
 
@@ -102,13 +151,6 @@ function vtkWebGPUGlyph3DMapper(publicAPI, model) {
102
151
  model.SSBO.send(device);
103
152
  model.glyphBOBuildTime.modified();
104
153
  }
105
-
106
- superClass.buildPrimitives();
107
-
108
- for (var i = 0; i < model.primitives.length; i++) {
109
- var primHelper = model.primitives[i];
110
- primHelper.setNumberOfInstances(numInstances);
111
- }
112
154
  };
113
155
  } // ----------------------------------------------------------------------------
114
156
  // Object factory
@@ -131,15 +173,6 @@ function extend(publicAPI, model) {
131
173
  }); // Object methods
132
174
 
133
175
  vtkWebGPUGlyph3DMapper(publicAPI, model);
134
-
135
- for (var i = PrimitiveTypes.Start; i < PrimitiveTypes.End; i++) {
136
- model.primitives[i].setSSBO(model.SSBO);
137
- var sr = model.primitives[i].getShaderReplacements();
138
- sr.set('replaceShaderPosition', publicAPI.replaceShaderPosition);
139
- sr.set('replaceShaderNormal', publicAPI.replaceShaderNormal);
140
- sr.set('replaceShaderSelect', publicAPI.replaceShaderSelect);
141
- sr.set('replaceShaderColor', publicAPI.replaceShaderColor);
142
- }
143
176
  } // ----------------------------------------------------------------------------
144
177
 
145
178
  var newInstance = newInstance$1(extend, 'vtkWebGPUGlyph3DMapper'); // ----------------------------------------------------------------------------
@@ -151,4 +184,4 @@ var index = {
151
184
 
152
185
  registerOverride('vtkGlyph3DMapper', newInstance);
153
186
 
154
- export { index as default, extend, newInstance };
187
+ export { caExtend, index as default, extend, newInstance };
@@ -2,11 +2,9 @@ import { mat4, vec4 } from 'gl-matrix';
2
2
  import Constants from '../Core/ImageMapper/Constants.js';
3
3
  import { newInstance as newInstance$1, obj } from '../../macros.js';
4
4
  import vtkWebGPUShaderCache from './ShaderCache.js';
5
- import vtkWebGPUStorageBuffer from './StorageBuffer.js';
6
5
  import vtkWebGPUFullScreenQuad from './FullScreenQuad.js';
7
6
  import vtkWebGPUUniformBuffer from './UniformBuffer.js';
8
7
  import vtkWebGPUSampler from './Sampler.js';
9
- import vtkViewNode from '../SceneGraph/ViewNode.js';
10
8
  import { InterpolationType } from '../Core/ImageProperty/Constants.js';
11
9
  import { registerOverride } from './ViewNodeFactory.js';
12
10
 
@@ -69,10 +67,8 @@ function vtkWebGPUImageMapper(publicAPI, model) {
69
67
  publicAPI.render = function () {
70
68
  model.renderable.update();
71
69
  model.currentInput = model.renderable.getInputData();
72
- model.renderEncoder = model.WebGPURenderer.getRenderEncoder();
73
- publicAPI.build(model.renderEncoder, model.device); // update descriptor sets
74
-
75
- publicAPI.updateUBO(model.device);
70
+ publicAPI.prepareToDraw(model.WebGPURenderer.getRenderEncoder());
71
+ model.renderEncoder.registerDrawCallback(model.pipeline, publicAPI.draw);
76
72
  };
77
73
 
78
74
  publicAPI.computePipelineHash = function () {
@@ -87,7 +83,7 @@ function vtkWebGPUImageMapper(publicAPI, model) {
87
83
  }
88
84
  };
89
85
 
90
- publicAPI.updateUBO = function (device) {
86
+ publicAPI.updateUBO = function () {
91
87
  var utime = model.UBO.getSendTime();
92
88
  var actor = model.WebGPUImageSlice.getRenderable();
93
89
  var volMapr = actor.getMapper();
@@ -172,7 +168,7 @@ function vtkWebGPUImageMapper(publicAPI, model) {
172
168
 
173
169
  var cScale = [1, 1, 1, 1];
174
170
  var cShift = [0, 0, 0, 0];
175
- var tView = model.helper.getTextureViews()[0];
171
+ var tView = model.textureViews[0];
176
172
  var tScale = tView.getTexture().getScale();
177
173
  var numComp = tView.getTexture().getNumberOfComponents();
178
174
  var iComps = false; // todo handle independent?
@@ -195,13 +191,13 @@ function vtkWebGPUImageMapper(publicAPI, model) {
195
191
 
196
192
  model.UBO.setArray('cScale', cScale);
197
193
  model.UBO.setArray('cShift', cShift);
198
- model.UBO.sendIfNeeded(device);
194
+ model.UBO.sendIfNeeded(model.device);
199
195
  }
200
196
  };
201
197
 
202
- publicAPI.updateLUTImage = function (device) {
198
+ publicAPI.updateLUTImage = function () {
203
199
  var actorProperty = model.WebGPUImageSlice.getRenderable().getProperty();
204
- var tView = model.helper.getTextureViews()[0];
200
+ var tView = publicAPI.getTextureViews()[0];
205
201
  tView.getTexture().getNumberOfComponents();
206
202
 
207
203
  var numIComps = 1;
@@ -257,35 +253,32 @@ function vtkWebGPUImageMapper(publicAPI, model) {
257
253
  depth: 1,
258
254
  format: 'rgba8unorm'
259
255
  };
260
- var newTex = device.getTextureManager().getTexture(treq);
256
+ var newTex = model.device.getTextureManager().getTexture(treq);
261
257
  var tview = newTex.createView('tfunTexture');
262
- var tViews = model.helper.getTextureViews();
263
- tViews[1] = tview;
258
+ model.textureViews[1] = tview;
264
259
  }
265
260
  model.colorTextureString = cfunToString;
266
261
  }
267
262
  };
268
263
 
269
- publicAPI.updateBuffers = function (device) {
264
+ var superClassUpdateBuffers = publicAPI.updateBuffers;
265
+
266
+ publicAPI.updateBuffers = function () {
267
+ superClassUpdateBuffers();
270
268
  var treq = {
271
269
  imageData: model.currentInput,
272
270
  owner: model.currentInput.getPointData().getScalars()
273
271
  };
274
- var newTex = device.getTextureManager().getTexture(treq);
275
- var tViews = model.helper.getTextureViews();
272
+ var newTex = model.device.getTextureManager().getTexture(treq);
273
+ var tViews = model.textureViews;
276
274
 
277
275
  if (!tViews[0] || tViews[0].getTexture() !== newTex) {
278
276
  var tview = newTex.createView('imgTexture');
279
277
  tViews[0] = tview;
280
278
  }
281
279
 
282
- publicAPI.updateLUTImage(device);
283
- };
284
-
285
- publicAPI.build = function (renderEncoder, device) {
286
- publicAPI.computePipelineHash();
287
- model.helper.setPipelineHash(model.pipelineHash);
288
- publicAPI.updateBuffers(device); // set interpolation on the texture based on property setting
280
+ publicAPI.updateLUTImage();
281
+ publicAPI.updateUBO(); // set interpolation on the texture based on property setting
289
282
 
290
283
  var actorProperty = model.WebGPUImageSlice.getRenderable().getProperty();
291
284
  var iType = actorProperty.getInterpolationType() === InterpolationType.NEAREST ? 'nearest' : 'linear';
@@ -294,26 +287,15 @@ function vtkWebGPUImageMapper(publicAPI, model) {
294
287
  model.clampSampler = vtkWebGPUSampler.newInstance({
295
288
  label: 'clampSampler'
296
289
  });
297
- model.clampSampler.create(device, {
290
+ model.clampSampler.create(model.device, {
298
291
  minFilter: iType,
299
292
  magFilter: iType
300
293
  });
294
+ model.additionalBindables = [model.clampSampler];
301
295
  }
302
-
303
- model.helper.setAdditionalBindables(publicAPI.getBindables());
304
- model.helper.setWebGPURenderer(model.WebGPURenderer);
305
- model.helper.build(renderEncoder, device);
306
- model.helper.registerToDraw();
307
296
  };
308
297
 
309
- publicAPI.getBindables = function () {
310
- var bindables = []; // bindables.push(model.componentSSBO);
311
-
312
- bindables.push(model.clampSampler);
313
- return bindables;
314
- };
315
-
316
- var sr = model.helper.getShaderReplacements();
298
+ var sr = publicAPI.getShaderReplacements();
317
299
 
318
300
  publicAPI.replaceShaderPosition = function (hash, pipeline, vertexInput) {
319
301
  var vDesc = pipeline.getShaderDescription('vertex');
@@ -367,27 +349,15 @@ function vtkWebGPUImageMapper(publicAPI, model) {
367
349
 
368
350
 
369
351
  var DEFAULT_VALUES = {
370
- rowLength: 1024 // VBOBuildTime: 0,
371
- // VBOBuildString: null,
372
- // webGPUTexture: null,
373
- // tris: null,
374
- // imagemat: null,
375
- // imagematinv: null,
376
- // colorTexture: null,
377
- // pwfTexture: null,
378
- // lastHaveSeenDepthRequest: false,
379
- // haveSeenDepthRequest: false,
380
- // lastTextureComponents: 0,
381
-
352
+ rowLength: 1024
382
353
  }; // ----------------------------------------------------------------------------
383
354
 
384
355
  function extend(publicAPI, model) {
385
356
  var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
386
357
  Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance
387
358
 
388
- vtkViewNode.extend(publicAPI, model, initialValues);
389
- model.helper = vtkWebGPUFullScreenQuad.newInstance();
390
- model.helper.setFragmentShaderTemplate(imgFragTemplate);
359
+ vtkWebGPUFullScreenQuad.extend(publicAPI, model, initialValues);
360
+ publicAPI.setFragmentShaderTemplate(imgFragTemplate);
391
361
  model.UBO = vtkWebGPUUniformBuffer.newInstance({
392
362
  label: 'mapperUBO'
393
363
  });
@@ -397,13 +367,6 @@ function extend(publicAPI, model) {
397
367
  model.UBO.addEntry('Axis1', 'vec4<f32>');
398
368
  model.UBO.addEntry('cScale', 'vec4<f32>');
399
369
  model.UBO.addEntry('cShift', 'vec4<f32>');
400
- model.helper.setUBO(model.UBO);
401
- model.SSBO = vtkWebGPUStorageBuffer.newInstance({
402
- label: 'volumeSSBO'
403
- });
404
- model.componentSSBO = vtkWebGPUStorageBuffer.newInstance({
405
- label: 'componentSSBO'
406
- });
407
370
  model.lutBuildTime = {};
408
371
  obj(model.lutBuildTime, {
409
372
  mtime: 0
@@ -77,11 +77,9 @@ function vtkWebGPUOrderIndependentTranslucentPass(publicAPI, model) {
77
77
  publicAPI.finalPass = function (viewNode, renNode) {
78
78
  model.translucentFinalEncoder.setColorTextureView(0, model.colorTextureView);
79
79
  model.translucentFinalEncoder.attachTextureViews();
80
- renNode.setRenderEncoder(model.translucentFinalEncoder);
81
- model.translucentFinalEncoder.begin(viewNode.getCommandEncoder()); // set viewport
82
-
80
+ model.translucentFinalEncoder.begin(viewNode.getCommandEncoder());
83
81
  renNode.scissorAndViewport(model.translucentFinalEncoder);
84
- model.fullScreenQuad.render(model.translucentFinalEncoder, viewNode.getDevice());
82
+ model.fullScreenQuad.prepareAndDraw(model.translucentFinalEncoder);
85
83
  model.translucentFinalEncoder.end();
86
84
  };
87
85
 
@@ -116,8 +114,8 @@ function vtkWebGPUOrderIndependentTranslucentPass(publicAPI, model) {
116
114
  fDesc.addOutput('f32', 'outAccum');
117
115
  fDesc.addBuiltinInput('vec4<f32>', '@builtin(position) fragPos');
118
116
  var code = fDesc.getCode();
119
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::RenderEncoder::Impl', [// very simple depth weighting in w
120
- 'var w: f32 = 1.0 - input.fragPos.z * 0.9;', 'output.outColor = vec4<f32>(computedColor.rgb*computedColor.a, computedColor.a) * w;', 'output.outAccum = computedColor.a;']).result;
117
+ code = vtkWebGPUShaderCache.substitute(code, '//VTK::RenderEncoder::Impl', [// very simple depth weighting in w z ranges from 1.0 near to 0.0
118
+ 'var w: f32 = computedColor.a * pow(0.1 + input.fragPos.z, 2.0);', 'output.outColor = vec4<f32>(computedColor.rgb*w, w);', 'output.outAccum = computedColor.a;']).result;
121
119
  fDesc.setCode(code);
122
120
  });
123
121
  model.translucentRenderEncoder.setPipelineHash('oitpr');
@@ -83,6 +83,17 @@ function vtkWebGPUPipeline(publicAPI, model) {
83
83
  publicAPI.bindVertexInput = function (renderEncoder, vInput) {
84
84
  vInput.bindBuffers(renderEncoder);
85
85
  };
86
+
87
+ publicAPI.addDrawCallback = function (cb) {
88
+ model._drawCallbacks.push(cb);
89
+ }; // handle anything that needs to be done when drawing
90
+
91
+
92
+ publicAPI.draw = function (encoder) {
93
+ for (var cb = 0; cb < model._drawCallbacks.length; cb++) {
94
+ model._drawCallbacks[cb](encoder, publicAPI);
95
+ }
96
+ };
86
97
  } // ----------------------------------------------------------------------------
87
98
  // Object factory
88
99
  // ----------------------------------------------------------------------------
@@ -105,6 +116,7 @@ function extend(publicAPI, model) {
105
116
  obj(publicAPI, model);
106
117
  model.layouts = [];
107
118
  model.shaderDescriptions = [];
119
+ model._drawCallbacks = [];
108
120
  get(publicAPI, model, ['handle', 'pipelineDescription']);
109
121
  setGet(publicAPI, model, ['device', 'renderEncoder', 'topology', 'vertexState']); // For more macro methods, see "Sources/macros.js"
110
122
  // Object specific methods