@kitware/vtk.js 22.1.7 → 22.2.2

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 (31) hide show
  1. package/IO/Core/ImageStream/DefaultProtocol.d.ts +8 -8
  2. package/IO/Core/ImageStream.d.ts +17 -15
  3. package/Rendering/Core/RenderWindowInteractor.js +3 -13
  4. package/Rendering/Core/ScalarBarActor.d.ts +39 -3
  5. package/Rendering/Core/ScalarBarActor.js +28 -8
  6. package/Rendering/Misc/SynchronizableRenderWindow.d.ts +73 -0
  7. package/Rendering/OpenGL/RenderWindow.d.ts +107 -106
  8. package/Rendering/OpenGL/RenderWindow.js +6 -0
  9. package/Rendering/OpenGL/VolumeMapper.js +64 -68
  10. package/Rendering/SceneGraph/RenderWindowViewNode.js +5 -0
  11. package/Rendering/WebGPU/FullScreenQuad.js +1 -1
  12. package/Rendering/WebGPU/Glyph3DMapper.js +2 -2
  13. package/Rendering/WebGPU/HardwareSelector.js +1 -0
  14. package/Rendering/WebGPU/ImageMapper.js +2 -2
  15. package/Rendering/WebGPU/MapperHelper.js +4 -4
  16. package/Rendering/WebGPU/OrderIndependentTranslucentPass.js +3 -3
  17. package/Rendering/WebGPU/PolyDataMapper.js +4 -4
  18. package/Rendering/WebGPU/RenderWindow.js +10 -1
  19. package/Rendering/WebGPU/Renderer.js +1 -1
  20. package/Rendering/WebGPU/Sampler.js +1 -1
  21. package/Rendering/WebGPU/ShaderDescription.js +4 -4
  22. package/Rendering/WebGPU/SphereMapper.js +3 -3
  23. package/Rendering/WebGPU/StickMapper.js +4 -4
  24. package/Rendering/WebGPU/StorageBuffer.js +1 -1
  25. package/Rendering/WebGPU/TextureView.js +2 -2
  26. package/Rendering/WebGPU/UniformBuffer.js +1 -1
  27. package/Rendering/WebGPU/VertexInput.js +1 -1
  28. package/Rendering/WebGPU/VolumePass.js +3 -3
  29. package/Rendering/WebGPU/VolumePassFSQ.js +3 -3
  30. package/Widgets/Core/WidgetManager.js +211 -71
  31. package/package.json +1 -1
@@ -3,6 +3,7 @@ import { Size, Vector2, Vector3 } from '@kitware/vtk.js/types';
3
3
  import { vtkRenderer } from '@kitware/vtk.js/Rendering/Core/Renderer';
4
4
  import { VtkDataTypes } from '@kitware/vtk.js/Common/Core/DataArray';
5
5
  import vtkTexture from '@kitware/vtk.js/Rendering/Core/Texture';
6
+ import vtkViewStream from '@kitware/vtk.js/IO/Core/ImageStream/ViewStream';
6
7
 
7
8
  /**
8
9
  *
@@ -18,7 +19,7 @@ export interface IOptions {
18
19
  resetCamera: boolean,
19
20
  size: Size,
20
21
  scale: number
21
- }
22
+ }
22
23
 
23
24
  type vtkOpenGLRenderWindowBase = vtkObject & Omit<vtkAlgorithm,
24
25
  | 'getInputData'
@@ -32,7 +33,7 @@ export interface vtkOpenGLRenderWindow extends vtkOpenGLRenderWindowBase {
32
33
 
33
34
  /**
34
35
  * Builds myself.
35
- * @param {Boolean} prepass
36
+ * @param {Boolean} prepass
36
37
  */
37
38
  buildPass(prepass: boolean): void;
38
39
 
@@ -45,12 +46,12 @@ export interface vtkOpenGLRenderWindow extends vtkOpenGLRenderWindowBase {
45
46
  initialize(): void;
46
47
 
47
48
  /**
48
- *
49
+ *
49
50
  */
50
51
  makeCurrent(): void;
51
52
 
52
53
  /**
53
- *
54
+ *
54
55
  * @param {HTMLElement} el The container element.
55
56
  */
56
57
  setContainer(el: HTMLElement): void;
@@ -91,170 +92,170 @@ export interface vtkOpenGLRenderWindow extends vtkOpenGLRenderWindowBase {
91
92
  getViewportCenter(viewport: vtkRenderer): Vector2;
92
93
 
93
94
  /**
94
- *
95
- * @param {Number} x
96
- * @param {Number} y
97
- * @param {Number} z
95
+ *
96
+ * @param {Number} x
97
+ * @param {Number} y
98
+ * @param {Number} z
98
99
  */
99
100
  displayToNormalizedDisplay(x: number, y: number, z: number): Vector3;
100
101
 
101
102
  /**
102
- *
103
- * @param {Number} x
104
- * @param {Number} y
105
- * @param {Number} z
103
+ *
104
+ * @param {Number} x
105
+ * @param {Number} y
106
+ * @param {Number} z
106
107
  */
107
108
  normalizedDisplayToDisplay(x: number, y: number, z: number): Vector3;
108
109
 
109
110
  /**
110
- *
111
- * @param {Number} x
112
- * @param {Number} y
113
- * @param {Number} z
114
- * @param {vtkRenderer} renderer
111
+ *
112
+ * @param {Number} x
113
+ * @param {Number} y
114
+ * @param {Number} z
115
+ * @param {vtkRenderer} renderer
115
116
  */
116
117
  worldToView(x: number, y: number, z: number, renderer: vtkRenderer): Vector3;
117
118
 
118
119
  /**
119
- *
120
- * @param {Number} x
121
- * @param {Number} y
122
- * @param {Number} z
123
- * @param {vtkRenderer} renderer
120
+ *
121
+ * @param {Number} x
122
+ * @param {Number} y
123
+ * @param {Number} z
124
+ * @param {vtkRenderer} renderer
124
125
  */
125
126
  viewToWorld(x: number, y: number, z: number, renderer: vtkRenderer): Vector3;
126
127
 
127
128
  /**
128
- *
129
- * @param {Number} x
130
- * @param {Number} y
131
- * @param {Number} z
132
- * @param {vtkRenderer} renderer
129
+ *
130
+ * @param {Number} x
131
+ * @param {Number} y
132
+ * @param {Number} z
133
+ * @param {vtkRenderer} renderer
133
134
  */
134
135
  worldToDisplay(x: number, y: number, z: number, renderer: vtkRenderer): Vector3;
135
136
 
136
137
  /**
137
- *
138
- * @param {Number} x
139
- * @param {Number} y
140
- * @param {Number} z
141
- * @param {vtkRenderer} renderer
138
+ *
139
+ * @param {Number} x
140
+ * @param {Number} y
141
+ * @param {Number} z
142
+ * @param {vtkRenderer} renderer
142
143
  */
143
144
  displayToWorld(x: number, y: number, z: number, renderer: vtkRenderer): Vector3;
144
145
 
145
146
  /**
146
- *
147
- * @param {Number} x
148
- * @param {Number} y
149
- * @param {Number} z
150
- * @param {vtkRenderer} renderer
147
+ *
148
+ * @param {Number} x
149
+ * @param {Number} y
150
+ * @param {Number} z
151
+ * @param {vtkRenderer} renderer
151
152
  */
152
153
  normalizedDisplayToViewport(x: number, y: number, z: number, renderer: vtkRenderer): Vector3;
153
154
 
154
155
  /**
155
- *
156
- * @param {Number} x
157
- * @param {Number} y
158
- * @param {Number} z
159
- * @param {vtkRenderer} renderer
156
+ *
157
+ * @param {Number} x
158
+ * @param {Number} y
159
+ * @param {Number} z
160
+ * @param {vtkRenderer} renderer
160
161
  */
161
162
  viewportToNormalizedViewport(x: number, y: number, z: number, renderer: vtkRenderer): Vector3;
162
163
 
163
164
  /**
164
- *
165
- * @param {Number} x
166
- * @param {Number} y
167
- * @param {Number} z
165
+ *
166
+ * @param {Number} x
167
+ * @param {Number} y
168
+ * @param {Number} z
168
169
  */
169
170
  normalizedViewportToViewport(x: number, y: number, z: number): Vector3;
170
171
 
171
172
  /**
172
- *
173
- * @param {Number} x
174
- * @param {Number} y
175
- * @param {Number} z
173
+ *
174
+ * @param {Number} x
175
+ * @param {Number} y
176
+ * @param {Number} z
176
177
  */
177
178
  displayToLocalDisplay(x: number, y: number, z: number): Vector3;
178
179
 
179
180
  /**
180
- *
181
- * @param {Number} x
182
- * @param {Number} y
183
- * @param {Number} z
184
- * @param {vtkRenderer} renderer
181
+ *
182
+ * @param {Number} x
183
+ * @param {Number} y
184
+ * @param {Number} z
185
+ * @param {vtkRenderer} renderer
185
186
  */
186
187
  viewportToNormalizedDisplay(x: number, y: number, z: number, renderer: vtkRenderer): Vector3;
187
188
 
188
189
  /**
189
- *
190
- * @param {Number} x1
191
- * @param {Number} y1
192
- * @param {Number} x2
193
- * @param {Number} y2
190
+ *
191
+ * @param {Number} x1
192
+ * @param {Number} y1
193
+ * @param {Number} x2
194
+ * @param {Number} y2
194
195
  */
195
196
  getPixelData(x1: number, y1: number, x2: number, y2: number): Uint8Array;
196
197
 
197
198
  /**
198
- *
199
- * @param options
199
+ *
200
+ * @param options
200
201
  */
201
202
  get3DContext(options: object): WebGLRenderingContext | null;
202
203
 
203
204
  /**
204
- *
205
+ *
205
206
  */
206
207
  startVR(): void;
207
208
 
208
209
  /**
209
- *
210
+ *
210
211
  */
211
212
  stopVR(): void;
212
213
 
213
214
  /**
214
- *
215
+ *
215
216
  */
216
217
  vrRender(): void;
217
218
 
218
219
  /**
219
- *
220
+ *
220
221
  */
221
222
  restoreContext(): void;
222
223
 
223
224
  /**
224
- *
225
- * @param {vtkTexture} texture
225
+ *
226
+ * @param {vtkTexture} texture
226
227
  */
227
228
  activateTexture(texture: vtkTexture): void;
228
229
 
229
230
  /**
230
- *
231
- * @param {vtkTexture} texture
231
+ *
232
+ * @param {vtkTexture} texture
232
233
  */
233
234
  deactivateTexture(texture: vtkTexture): void;
234
235
 
235
236
  /**
236
- *
237
- * @param {vtkTexture} texture
237
+ *
238
+ * @param {vtkTexture} texture
238
239
  */
239
240
  getTextureUnitForTexture(texture: vtkTexture): number;
240
241
 
241
242
  /**
242
- *
243
- * @param vtktype
244
- * @param numComps
245
- * @param useFloat
243
+ *
244
+ * @param vtktype
245
+ * @param numComps
246
+ * @param useFloat
246
247
  */
247
248
  getDefaultTextureInternalFormat(vtktype: VtkDataTypes, numComps: number, useFloat: boolean): void;
248
249
 
249
250
  /**
250
- *
251
- * @param {HTMLImageElement} img
251
+ *
252
+ * @param {HTMLImageElement} img
252
253
  */
253
254
  setBackgroundImage(img: HTMLImageElement): void;
254
255
 
255
256
  /**
256
- *
257
- * @param {Boolean} value
257
+ *
258
+ * @param {Boolean} value
258
259
  */
259
260
  setUseBackgroundImage(value: boolean): void;
260
261
 
@@ -269,70 +270,70 @@ export interface vtkOpenGLRenderWindow extends vtkOpenGLRenderWindowBase {
269
270
  * size. If no `size` or `scale` are provided, the current renderwindow
270
271
  * size is assumed. The default format is "image/png". Returns a promise
271
272
  * that resolves to the captured screenshot.
272
- * @param {String} format
273
- * @param {IOptions} options
273
+ * @param {String} format
274
+ * @param {IOptions} options
274
275
  */
275
276
  captureNextImage(format: string, options: IOptions): Promise<string> | null;
276
277
 
277
278
  /**
278
- *
279
+ *
279
280
  */
280
281
  getGLInformations(): object;
281
282
 
282
283
  /**
283
- *
284
+ *
284
285
  */
285
286
  traverseAllPasses(): void;
286
287
 
287
288
  /**
288
- *
289
+ *
289
290
  */
290
291
  disableCullFace(): void;
291
292
 
292
293
  /**
293
- *
294
+ *
294
295
  */
295
296
  enableCullFace(): void;
296
297
 
297
298
  /**
298
- *
299
- * @param stream
299
+ *
300
+ * @param stream
300
301
  */
301
- setViewStream(stream: any): boolean;
302
+ setViewStream(stream: vtkViewStream): boolean;
302
303
 
303
304
  /**
304
- *
305
- * @param {Vector2} size
305
+ *
306
+ * @param {Vector2} size
306
307
  */
307
308
  setSize(size: Vector2): void;
308
309
 
309
310
  /**
310
- *
311
- * @param {Number} x
312
- * @param {Number} y
311
+ *
312
+ * @param {Number} x
313
+ * @param {Number} y
313
314
  */
314
315
  setSize(x: number, y: number): void;
315
316
 
316
317
  /**
317
- *
318
+ *
318
319
  */
319
320
  getSize(): Vector2;
320
321
 
321
322
  /**
322
- *
323
- * @param {Vector2} size
323
+ *
324
+ * @param {Vector2} size
324
325
  */
325
326
  setVrResolution(size: Vector2): void;
326
327
 
327
328
  /**
328
- *
329
- * @param {Number} x
330
- * @param {Number} y
329
+ *
330
+ * @param {Number} x
331
+ * @param {Number} y
331
332
  */
332
333
  setVrResolution(x: number, y: number): void;
333
334
 
334
335
  /**
335
- *
336
+ *
336
337
  */
337
338
  getVrResolution(): Vector2;
338
339
  }
@@ -353,20 +354,20 @@ export function extend(publicAPI: object, model: object, initialValues?: IOpenGL
353
354
  export function newInstance(initialValues?: IOpenGLRenderWindowInitialValues): vtkOpenGLRenderWindow;
354
355
 
355
356
  /**
356
- *
357
- * @param cb
357
+ *
358
+ * @param cb
358
359
  */
359
360
  export function pushMonitorGLContextCount(cb: any): void;
360
361
 
361
362
  /**
362
- *
363
- * @param cb
363
+ *
364
+ * @param cb
364
365
  */
365
366
  export function popMonitorGLContextCount(cb: any): void;
366
367
 
367
368
  /**
368
369
  * WebGL rendering window
369
- *
370
+ *
370
371
  * vtkOpenGLRenderWindow is designed to view/render a vtkRenderWindow.
371
372
  */
372
373
  export declare const vtkOpenGLRenderWindow: {
@@ -816,6 +816,12 @@ function vtkOpenGLRenderWindow(publicAPI, model) {
816
816
  return true;
817
817
  };
818
818
 
819
+ publicAPI.createSelector = function () {
820
+ var ret = vtkHardwareSelector.newInstance();
821
+ ret.setOpenGLRenderWindow(publicAPI);
822
+ return ret;
823
+ };
824
+
819
825
  publicAPI.delete = macro.chain(publicAPI.delete, publicAPI.setViewStream, deleteGLContext);
820
826
  } // ----------------------------------------------------------------------------
821
827
  // Object factory
@@ -1,5 +1,5 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
- import { newInstance as newInstance$1, obj, setGet, vtkWarningMacro as vtkWarningMacro$1, vtkErrorMacro as vtkErrorMacro$1 } from '../../macros.js';
2
+ import { newInstance as newInstance$1, obj, setGet, chain, vtkWarningMacro as vtkWarningMacro$1, vtkErrorMacro as vtkErrorMacro$1 } from '../../macros.js';
3
3
  import { mat4, mat3, vec3 } from 'gl-matrix';
4
4
  import vtkDataArray from '../../Common/Core/DataArray.js';
5
5
  import { VtkDataTypes } from '../../Common/Core/DataArray/Constants.js';
@@ -672,90 +672,86 @@ function vtkOpenGLVolumeMapper(publicAPI, model) {
672
672
  program.setUniform3fv("vClipPlaneNormals", clipPlaneNormals);
673
673
  program.setUniformfv("vClipPlaneDistances", clipPlaneDistances);
674
674
  }
675
- };
675
+ }; // unsubscribe from our listeners
676
+
677
+
678
+ publicAPI.delete = chain(function () {
679
+ if (model._animationRateSubscription) {
680
+ model._animationRateSubscription.unsubscribe();
681
+
682
+ model._animationRateSubscription = null;
683
+ }
684
+ }, publicAPI.delete);
676
685
 
677
686
  publicAPI.getRenderTargetSize = function () {
678
- if (model.lastXYF > 1.43) {
679
- var sz = model.framebuffer.getSize();
680
- return [model.fvp[0] * sz[0], model.fvp[1] * sz[1]];
687
+ if (model._useSmallViewport) {
688
+ return [model._smallViewportWidth, model._smallViewportHeight];
681
689
  }
682
690
 
683
691
  return model.openGLRenderWindow.getFramebufferSize();
684
692
  };
685
693
 
686
694
  publicAPI.renderPieceStart = function (ren, actor) {
687
- if (model.renderable.getAutoAdjustSampleDistances()) {
688
- var rwi = ren.getVTKWindow().getInteractor();
689
- var rft = rwi.getLastFrameTime(); // console.log(`last frame time ${Math.floor(1.0 / rft)}`);
690
- // frame time is typically for a couple frames prior
691
- // which makes it messy, so keep long running averages
692
- // of frame times and pixels rendered
693
-
694
- model.avgFrameTime = 0.97 * model.avgFrameTime + 0.03 * rft;
695
- model.avgWindowArea = 0.97 * model.avgWindowArea + 0.03 / (model.lastXYF * model.lastXYF);
696
-
697
- if (ren.getVTKWindow().getInteractor().isAnimating()) {
698
- // compute target xy factor
699
- var txyf = Math.sqrt(model.avgFrameTime * rwi.getDesiredUpdateRate() / model.avgWindowArea); // limit subsampling to a factor of 10
700
-
701
- if (txyf > 10.0) {
702
- txyf = 10.0;
703
- }
695
+ var rwi = ren.getVTKWindow().getInteractor();
696
+ model._useSmallViewport = false;
697
+
698
+ if (rwi.isAnimating() && model._lastScale > 1.5) {
699
+ model._useSmallViewport = true;
700
+ }
701
+
702
+ if (!model._animationRateSubscription) {
703
+ // when the animation frame rate changes recompute the scale factor
704
+ model._animationRateSubscription = rwi.onAnimationFrameRateUpdate(function () {
705
+ if (model.renderable.getAutoAdjustSampleDistances()) {
706
+ var frate = rwi.getRecentAnimationFrameRate();
707
+ var adjustment = rwi.getDesiredUpdateRate() / frate; // only change if we are off by 15%
708
+
709
+ if (adjustment > 1.15 || adjustment < 0.85) {
710
+ model._lastScale *= adjustment;
711
+ } // clamp scale to some reasonable values.
712
+ // Below 1.5 we will just be using full resolution as that is close enough
713
+ // Above 400 seems like a lot so we limit to that 1/20th per axis
704
714
 
705
- model.targetXYF = txyf;
706
- } else {
707
- model.targetXYF = Math.sqrt(model.avgFrameTime * rwi.getStillUpdateRate() / model.avgWindowArea);
708
- } // have some inertia to change states around 1.43
709
715
 
716
+ if (model._lastScale > 400) {
717
+ model._lastScale = 400;
718
+ }
719
+
720
+ if (model._lastScale < 1.5) {
721
+ model._lastScale = 1.5;
722
+ }
723
+ } else {
724
+ model._lastScale = model.renderable.getImageSampleDistance() * model.renderable.getImageSampleDistance();
725
+ }
726
+
727
+ var size = model.openGLRenderWindow.getFramebufferSize();
728
+ model._smallViewportWidth = Math.ceil(size[0] / Math.sqrt(model._lastScale));
729
+ model._smallViewportHeight = Math.ceil(size[1] / Math.sqrt(model._lastScale));
730
+ });
731
+ } // use/create/resize framebuffer if needed
710
732
 
711
- if (model.targetXYF < 1.53 && model.targetXYF > 1.33) {
712
- model.targetXYF = model.lastXYF;
713
- } // and add some inertia to change at all
714
733
 
734
+ if (model._useSmallViewport) {
735
+ var size = model.openGLRenderWindow.getFramebufferSize(); // adjust viewportSize to always be at most the dest fo size
715
736
 
716
- if (Math.abs(1.0 - model.targetXYF / model.lastXYF) < 0.1) {
717
- model.targetXYF = model.lastXYF;
737
+ if (model._smallViewportHeight > size[1]) {
738
+ model._smallViewportHeight = size[1];
718
739
  }
719
740
 
720
- model.lastXYF = model.targetXYF;
721
- } else {
722
- model.lastXYF = model.renderable.getImageSampleDistance();
723
- } // only use FBO beyond this value
724
-
725
-
726
- if (model.lastXYF <= 1.43) {
727
- model.lastXYF = 1.0;
728
- } // console.log(`last target ${model.lastXYF} ${model.targetXYF}`);
729
- // console.log(`awin aft ${model.avgWindowArea} ${model.avgFrameTime}`);
730
-
731
-
732
- var xyf = model.lastXYF;
733
- var size = model.openGLRenderWindow.getFramebufferSize(); // const newSize = [
734
- // Math.floor((size[0] / xyf) + 0.5),
735
- // Math.floor((size[1] / xyf) + 0.5)];
736
- // const diag = vtkBoundingBox.getDiagonalLength(model.currentInput.getBounds());
737
- // // so what is the resulting sample size roughly
738
- // console.log(`sam size ${diag / newSize[0]} ${diag / newSize[1]} ${model.renderable.getImageSampleDistance()}`);
739
- // // if the sample distance is getting far from the image sample dist
740
- // if (2.0 * diag / (newSize[0] + newSize[1]) > 4 * model.renderable.getSampleDistance()) {
741
- // model.renderable.setSampleDistance(4.0 * model.renderable.getSampleDistance());
742
- // }
743
- // if (2.0 * diag / (newSize[0] + newSize[1]) < 0.25 * model.renderable.getSampleDistance()) {
744
- // model.renderable.setSampleDistance(0.25 * model.renderable.getSampleDistance());
745
- // }
746
- // create/resize framebuffer if needed
741
+ if (model._smallViewportWidth > size[0]) {
742
+ model._smallViewportWidth = size[0];
743
+ }
747
744
 
748
- if (xyf > 1.43) {
749
745
  model.framebuffer.saveCurrentBindingsAndBuffers();
750
746
 
751
747
  if (model.framebuffer.getGLFramebuffer() === null) {
752
- model.framebuffer.create(Math.floor(size[0] * 0.7), Math.floor(size[1] * 0.7));
748
+ model.framebuffer.create(size[0], size[1]);
753
749
  model.framebuffer.populateFramebuffer();
754
750
  } else {
755
751
  var fbSize = model.framebuffer.getSize();
756
752
 
757
- if (fbSize[0] !== Math.floor(size[0] * 0.7) || fbSize[1] !== Math.floor(size[1] * 0.7)) {
758
- model.framebuffer.create(Math.floor(size[0] * 0.7), Math.floor(size[1] * 0.7));
753
+ if (fbSize[0] !== size[0] || fbSize[1] !== size[1]) {
754
+ model.framebuffer.create(size[0], size[1]);
759
755
  model.framebuffer.populateFramebuffer();
760
756
  }
761
757
  }
@@ -765,8 +761,8 @@ function vtkOpenGLVolumeMapper(publicAPI, model) {
765
761
  gl.clearColor(0.0, 0.0, 0.0, 0.0);
766
762
  gl.colorMask(true, true, true, true);
767
763
  gl.clear(gl.COLOR_BUFFER_BIT);
768
- gl.viewport(0, 0, size[0] / xyf, size[1] / xyf);
769
- model.fvp = [Math.floor(size[0] / xyf) / Math.floor(size[0] * 0.7), Math.floor(size[1] / xyf) / Math.floor(size[1] * 0.7)];
764
+ gl.viewport(0, 0, model._smallViewportWidth, model._smallViewportHeight);
765
+ model.fvp = [model._smallViewportWidth / size[0], model._smallViewportHeight / size[1]];
770
766
  }
771
767
 
772
768
  model.context.disable(model.context.DEPTH_TEST); // make sure the BOs are up to date
@@ -817,7 +813,7 @@ function vtkOpenGLVolumeMapper(publicAPI, model) {
817
813
  model.zBufferTexture.deactivate();
818
814
  }
819
815
 
820
- if (model.lastXYF > 1.43) {
816
+ if (model._useSmallViewport) {
821
817
  // now copy the framebuffer with the volume into the
822
818
  // regular buffer
823
819
  model.framebuffer.restorePreviousBindingsAndBuffers();
@@ -1006,8 +1002,7 @@ function vtkOpenGLVolumeMapper(publicAPI, model) {
1006
1002
  var dims = image.getDimensions();
1007
1003
  model.scalarTexture.releaseGraphicsResources(model.openGLRenderWindow);
1008
1004
  model.scalarTexture.resetFormatAndType();
1009
- model.scalarTexture.create3DFilterableFromRaw(dims[0], dims[1], dims[2], numComp, scalars.getDataType(), scalars.getData(), model.renderable.getPreferSizeOverAccuracy()); // console.log(model.scalarTexture.get());
1010
-
1005
+ model.scalarTexture.create3DFilterableFromRaw(dims[0], dims[1], dims[2], numComp, scalars.getDataType(), scalars.getData(), model.renderable.getPreferSizeOverAccuracy());
1011
1006
  model.scalarTextureString = toString;
1012
1007
  }
1013
1008
 
@@ -1125,7 +1120,8 @@ function extend(publicAPI, model) {
1125
1120
  model.idxNormalMatrix = mat3.identity(new Float64Array(9));
1126
1121
  model.modelToView = mat4.identity(new Float64Array(16));
1127
1122
  model.projectionToView = mat4.identity(new Float64Array(16));
1128
- model.projectionToWorld = mat4.identity(new Float64Array(16)); // Build VTK API
1123
+ model.projectionToWorld = mat4.identity(new Float64Array(16));
1124
+ model._lastScale = 1.0; // Build VTK API
1129
1125
 
1130
1126
  setGet(publicAPI, model, ['context']); // Object methods
1131
1127
 
@@ -123,6 +123,11 @@ function vtkRenderWindowViewNode(publicAPI, model) {
123
123
  macro.vtkErrorMacro('not implemented');
124
124
  return undefined;
125
125
  };
126
+
127
+ publicAPI.createSelector = function () {
128
+ macro.vtkErrorMacro('not implemented');
129
+ return undefined;
130
+ };
126
131
  } // ----------------------------------------------------------------------------
127
132
  // Object factory
128
133
  // ----------------------------------------------------------------------------
@@ -11,7 +11,7 @@ function vtkWebGPUFullScreenQuad(publicAPI, model) {
11
11
 
12
12
  publicAPI.replaceShaderPosition = function (hash, pipeline, vertexInput) {
13
13
  var vDesc = pipeline.getShaderDescription('vertex');
14
- vDesc.addBuiltinOutput('vec4<f32>', '[[builtin(position)]] Position');
14
+ vDesc.addBuiltinOutput('vec4<f32>', '@builtin(position) Position');
15
15
  var code = vDesc.getCode();
16
16
  code = vtkWebGPUShaderCache.substitute(code, '//VTK::Position::Impl', ['output.tcoordVS = vec2<f32>(vertexBC.x * 0.5 + 0.5, 1.0 - vertexBC.y * 0.5 - 0.5);', 'output.Position = vec4<f32>(vertexBC, 1.0);']).result;
17
17
  vDesc.setCode(code);
@@ -21,8 +21,8 @@ function vtkWebGPUGlyph3DMapper(publicAPI, model) {
21
21
 
22
22
  publicAPI.replaceShaderPosition = function (hash, pipeline, vertexInput) {
23
23
  var vDesc = pipeline.getShaderDescription('vertex');
24
- vDesc.addBuiltinInput('u32', '[[builtin(instance_index)]] instanceIndex');
25
- vDesc.addBuiltinOutput('vec4<f32>', '[[builtin(position)]] Position');
24
+ vDesc.addBuiltinInput('u32', '@builtin(instance_index) instanceIndex');
25
+ vDesc.addBuiltinOutput('vec4<f32>', '@builtin(position) Position');
26
26
  var code = vDesc.getCode();
27
27
  code = vtkWebGPUShaderCache.substitute(code, '//VTK::Position::Impl', [' output.Position = rendererUBO.SCPCMatrix*mapperUBO.BCSCMatrix', ' *glyphSSBO.values[input.instanceIndex].matrix', ' *vertexBC;']).result;
28
28
  vDesc.setCode(code);
@@ -278,6 +278,7 @@ function vtkWebGPUHardwareSelector(publicAPI, model) {
278
278
  // result object (by value in most cases)
279
279
 
280
280
  result = {
281
+ area: [0, 0, texture.getWidth() - 1, texture.getHeight() - 1],
281
282
  captureZValues: model.captureZValues,
282
283
  fieldAssociation: model.fieldAssociation,
283
284
  renderer: renderer,
@@ -11,7 +11,7 @@ import { InterpolationType } from '../Core/ImageProperty/Constants.js';
11
11
  import { registerOverride } from './ViewNodeFactory.js';
12
12
 
13
13
  var SlicingMode = Constants.SlicingMode;
14
- var imgFragTemplate = "\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Image::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n[[stage(fragment)]]\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n //VTK::Image::Sample\n\n // var computedColor: vec4<f32> = vec4<f32>(1.0,0.7, 0.5, 1.0);\n\n//VTK::RenderEncoder::Impl\n\n return output;\n}\n"; // ----------------------------------------------------------------------------
14
+ var imgFragTemplate = "\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Image::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@stage(fragment)\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n //VTK::Image::Sample\n\n // var computedColor: vec4<f32> = vec4<f32>(1.0,0.7, 0.5, 1.0);\n\n//VTK::RenderEncoder::Impl\n\n return output;\n}\n"; // ----------------------------------------------------------------------------
15
15
  // helper methods
16
16
  // ----------------------------------------------------------------------------
17
17
 
@@ -318,7 +318,7 @@ function vtkWebGPUImageMapper(publicAPI, model) {
318
318
 
319
319
  publicAPI.replaceShaderPosition = function (hash, pipeline, vertexInput) {
320
320
  var vDesc = pipeline.getShaderDescription('vertex');
321
- vDesc.addBuiltinOutput('vec4<f32>', '[[builtin(position)]] Position');
321
+ vDesc.addBuiltinOutput('vec4<f32>', '@builtin(position) Position');
322
322
  var code = vDesc.getCode();
323
323
  var lines = ['var pos: vec4<f32> = mapperUBO.Origin +', ' (vertexBC.x * 0.5 + 0.5) * mapperUBO.Axis1 + (vertexBC.y * 0.5 + 0.5) * mapperUBO.Axis2;', 'pos.w = 1.0;'];
324
324