@kitware/vtk.js 22.5.4 → 22.5.7

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.
@@ -221,22 +221,6 @@ function vtkScalarBarActorHelper(publicAPI, model) {
221
221
  model.lastRedrawTime.modified();
222
222
  model.forceViewUpdate = false;
223
223
  }
224
- }; // The text atlas is an image and as loading images is async we call this when
225
- // the promise resolves. The old texture is used until then
226
-
227
-
228
- publicAPI.completedImage = function (doUpdate) {
229
- if (model.nextImage && model.nextImage.complete) {
230
- model.tmTexture.setImage(model.nextImage);
231
- model.nextImage = null;
232
- model._tmAtlas = model._nextAtlas;
233
- model._nextAtlas = null;
234
-
235
- if (doUpdate) {
236
- model.forceViewUpdate = true;
237
- model.renderWindow.render();
238
- }
239
- }
240
224
  }; // create the texture map atlas that contains the rendering of
241
225
  // all the text strings. Only needs to be called when the text strings
242
226
  // have changed (labels and ticks)
@@ -317,19 +301,10 @@ function vtkScalarBarActorHelper(publicAPI, model) {
317
301
  applyTextStyle(model.tmContext, value.textStyle);
318
302
  model.tmContext.fillText(key, 1, value.startingHeight + value.height - 1);
319
303
  });
320
- var image = new Image();
321
- image.src = model.tmCanvas.toDataURL('image/png');
322
- model.nextImage = image;
323
- model._nextAtlas = newTmAtlas;
324
-
325
- if (image.complete) {
326
- publicAPI.completedImage(false);
327
- } else {
328
- image.addEventListener('load', function () {
329
- publicAPI.completedImage(true);
330
- });
331
- }
304
+ model.tmTexture.setCanvas(model.tmCanvas); // mark as modified since the canvas typically doesn't change
332
305
 
306
+ model.tmTexture.modified();
307
+ model._tmAtlas = newTmAtlas;
333
308
  return results;
334
309
  };
335
310
 
@@ -13,14 +13,52 @@ function vtkTexture(publicAPI, model) {
13
13
  publicAPI.modified();
14
14
  };
15
15
 
16
+ publicAPI.setJsImageData = function (imageData) {
17
+ if (model.jsImageData === imageData) {
18
+ return;
19
+ } // clear other entries
20
+
21
+
22
+ if (imageData !== null) {
23
+ publicAPI.setInputData(null);
24
+ publicAPI.setInputConnection(null);
25
+ model.image = null;
26
+ model.canvas = null;
27
+ }
28
+
29
+ model.jsImageData = imageData;
30
+ model.imageLoaded = true;
31
+ publicAPI.modified();
32
+ };
33
+
34
+ publicAPI.setCanvas = function (canvas) {
35
+ if (model.canvas === canvas) {
36
+ return;
37
+ } // clear other entries
38
+
39
+
40
+ if (canvas !== null) {
41
+ publicAPI.setInputData(null);
42
+ publicAPI.setInputConnection(null);
43
+ model.image = null;
44
+ model.jsImageData = null;
45
+ }
46
+
47
+ model.canvas = canvas;
48
+ publicAPI.modified();
49
+ };
50
+
16
51
  publicAPI.setImage = function (image) {
17
52
  if (model.image === image) {
18
53
  return;
19
- }
54
+ } // clear other entries
55
+
20
56
 
21
57
  if (image !== null) {
22
58
  publicAPI.setInputData(null);
23
59
  publicAPI.setInputConnection(null);
60
+ model.canvas = null;
61
+ model.jsImageData = null;
24
62
  }
25
63
 
26
64
  model.image = image;
@@ -44,7 +82,9 @@ var DEFAULT_VALUES = {
44
82
  interpolate: false,
45
83
  edgeClamp: false,
46
84
  image: null,
47
- imageLoaded: false
85
+ canvas: null,
86
+ imageLoaded: false,
87
+ jsImageData: null
48
88
  }; // ----------------------------------------------------------------------------
49
89
 
50
90
  function extend(publicAPI, model) {
@@ -53,8 +93,8 @@ function extend(publicAPI, model) {
53
93
 
54
94
  macro.obj(publicAPI, model);
55
95
  macro.algo(publicAPI, model, 6, 0);
56
- macro.get(publicAPI, model, ['imageLoaded']);
57
- macro.setGet(publicAPI, model, ['repeat', 'edgeClamp', 'interpolate', 'image']);
96
+ macro.get(publicAPI, model, ['canvas', 'image', 'jsImageData', 'imageLoaded']);
97
+ macro.setGet(publicAPI, model, ['repeat', 'edgeClamp', 'interpolate']);
58
98
  vtkTexture(publicAPI, model);
59
99
  } // ----------------------------------------------------------------------------
60
100
 
@@ -1,13 +1,13 @@
1
1
  import vtkRenderWindow, { IRenderWindowInitialValues } from '@kitware/vtk.js/Rendering/Core/RenderWindow';
2
2
 
3
3
  // Keeps state for client / server scene synchronization.
4
- export interface SynchContext {
4
+ export interface ISynchronizerContext {
5
5
  // Set a function that fetches the data array for the given object.
6
6
  setFetchArrayFunction(fetcher: (hash: string, dataType: any) => Promise<ArrayBuffer>): void;
7
7
  // Invokes the fetcher registered by setFetchArrayFunction.
8
- getArray(sha: string, dataType: any, context: SynchContext): Promise<ArrayBuffer>;
8
+ getArray(sha: string, dataType: any, context: ISynchronizerContext): Promise<ArrayBuffer>;
9
9
  emptyCachedArrays(): void;
10
- freeOldArrays(threshold: number, context: SynchContext): void;
10
+ freeOldArrays(threshold: number, context: ISynchronizerContext): void;
11
11
 
12
12
  // instanceMap
13
13
  getInstance(id: any): any;
@@ -25,14 +25,14 @@ export interface SynchContext {
25
25
  // TODO: fill progresshandler
26
26
  }
27
27
 
28
- export interface IInitialValues extends IRenderWindowInitialValues {
28
+ export interface ISynchronizableRenderWindowInitialValues extends IRenderWindowInitialValues {
29
29
  synchronizerContextName?: string; // default: 'default':
30
- synchronizerContext?: SynchContext | null;
30
+ synchronizerContext?: ISynchronizerContext | null;
31
31
  synchronizedViewId?: string | null;
32
32
  }
33
33
 
34
34
  // Server-side view state.
35
- export interface ViewState {
35
+ export interface IViewState {
36
36
  id: string;
37
37
  // vtk object type.
38
38
  type: string;
@@ -42,7 +42,7 @@ export interface ViewState {
42
42
  parent?: string | null;
43
43
  properties?: {[key: string]: any};
44
44
  // Child objects.
45
- dependencies?: ViewState[];
45
+ dependencies?: IViewState[];
46
46
  extra?: any;
47
47
  // List of [methodName, args] to be invoked on the object.
48
48
  calls?: [string, string[]][];
@@ -50,24 +50,116 @@ export interface ViewState {
50
50
  [key: string]: any;
51
51
  }
52
52
 
53
- export interface vtkSynchronizableRenderWindowInstance extends vtkRenderWindow {
54
- getSynchronizerContext(): SynchContext;
53
+ export interface vtkSynchronizableRenderWindow extends vtkRenderWindow {
54
+
55
+ /**
56
+ *
57
+ */
58
+ getSynchronizerContext(): ISynchronizerContext;
55
59
 
56
60
  // methods added by createSyncFunction
57
- synchronize(state: ViewState): Promise<boolean>;
61
+
62
+ /**
63
+ *
64
+ * @param {IViewState} state
65
+ */
66
+ synchronize(state: IViewState): Promise<boolean>;
67
+
68
+ /**
69
+ *
70
+ * @param {String} viewId
71
+ */
58
72
  setSynchronizedViewId(viewId: string): void;
73
+
74
+ /**
75
+ *
76
+ */
59
77
  getSynchronizedViewId(): string;
78
+
79
+ /**
80
+ *
81
+ * @param {Number} v
82
+ */
60
83
  updateGarbageCollectorThreshold(v: number): void;
61
- getManagedInstanceIds(): Array<string>;
84
+
85
+ /**
86
+ *
87
+ */
88
+ getManagedInstanceIds(): string[];
89
+
90
+ /**
91
+ *
92
+ */
62
93
  clearOneTimeUpdaters(): void;
63
94
  }
64
95
 
65
- export function newInstance(props: IInitialValues): vtkSynchronizableRenderWindowInstance;
66
- export function getSynchronizerContext(name?: string): SynchContext;
96
+ /**
97
+ * Method used to decorate a given object (publicAPI+model) with vtkCellArray characteristics.
98
+ *
99
+ * @param publicAPI object on which methods will be bounds (public)
100
+ * @param model object on which data structure will be bounds (protected)
101
+ * @param {ISynchronizableRenderWindowInitialValues} [initialValues] (default: {})
102
+ */
103
+ export function extend(publicAPI: object, model: object, initialValues?: ISynchronizableRenderWindowInitialValues): void;
104
+
105
+ /**
106
+ * Method used to create a new instance of vtkSynchronizableRenderWindow
107
+ * @param {ISynchronizableRenderWindowInitialValues} [initialValues] for pre-setting some of its content
108
+ */
109
+ export function newInstance(initialValues?: ISynchronizableRenderWindowInitialValues): vtkSynchronizableRenderWindow;
67
110
 
68
- export const vtkSynchronizableRenderWindow: {
111
+ /**
112
+ *
113
+ * @param {String} [name]
114
+ */
115
+ export function getSynchronizerContext(name?: string): ISynchronizerContext;
116
+
117
+ /**
118
+ *
119
+ * @param {String} name
120
+ * @param {ISynchronizerContext} ctx
121
+ */
122
+ export function setSynchronizerContext(name: string, ctx: ISynchronizerContext): ISynchronizerContext;
123
+
124
+ /**
125
+ *
126
+ * @param {vtkRenderWindow} renderWindow
127
+ * @param {String} [name]
128
+ */
129
+ export function decorate(renderWindow: vtkRenderWindow, name?: string): object;
130
+
131
+ /**
132
+ *
133
+ */
134
+ export function createInstanceMap(): object;
135
+
136
+ /**
137
+ *
138
+ */
139
+ export function createArrayHandler(): object;
140
+
141
+ /**
142
+ *
143
+ */
144
+ export function createProgressHandler(): object;
145
+
146
+ /**
147
+ *
148
+ */
149
+ export function createSceneMtimeHandler(): object;
150
+
151
+ /**
152
+ *
153
+ */
154
+ export declare const vtkSynchronizableRenderWindow: {
69
155
  newInstance: typeof newInstance;
70
156
  getSynchronizerContext: typeof getSynchronizerContext;
157
+ setSynchronizerContext: typeof setSynchronizerContext;
158
+ decorate: typeof decorate,
159
+ createInstanceMap: typeof createInstanceMap,
160
+ createArrayHandler: typeof createArrayHandler,
161
+ createProgressHandler: typeof createProgressHandler,
162
+ createSceneMtimeHandler: typeof createSceneMtimeHandler,
163
+ vtkObjectManager: object
71
164
  };
72
-
73
165
  export default vtkSynchronizableRenderWindow;
@@ -703,13 +703,17 @@ function vtkOpenGLRenderWindow(publicAPI, model) {
703
703
  publicAPI.modified();
704
704
 
705
705
  if (resetCamera) {
706
- // If resetCamera was requested, we first save camera parameters
706
+ var isUserResetCamera = resetCamera !== true; // If resetCamera was requested, we first save camera parameters
707
707
  // from all the renderers, so we can restore them later
708
+
708
709
  model._screenshot.cameras = model.renderable.getRenderers().map(function (renderer) {
709
710
  var camera = renderer.getActiveCamera();
710
711
  var params = camera.get('focalPoint', 'position', 'parallelScale');
711
712
  return {
712
- resetCameraFn: renderer.resetCamera,
713
+ resetCameraArgs: isUserResetCamera ? {
714
+ renderer: renderer
715
+ } : undefined,
716
+ resetCameraFn: isUserResetCamera ? resetCamera : renderer.resetCamera,
713
717
  restoreParamsFn: camera.set,
714
718
  // "clone" the params so we don't keep refs to properties
715
719
  arg: JSON.parse(JSON.stringify(params))
@@ -719,8 +723,9 @@ function vtkOpenGLRenderWindow(publicAPI, model) {
719
723
  // linked cameras among the renderers.
720
724
 
721
725
  model._screenshot.cameras.forEach(function (_ref6) {
722
- var resetCameraFn = _ref6.resetCameraFn;
723
- return resetCameraFn();
726
+ var resetCameraFn = _ref6.resetCameraFn,
727
+ resetCameraArgs = _ref6.resetCameraArgs;
728
+ return resetCameraFn(resetCameraArgs);
724
729
  });
725
730
  } // Trigger a render at the custom size
726
731
 
@@ -1,4 +1,4 @@
1
- import md5 from 'blueimp-md5';
1
+ import Md5 from 'spark-md5';
2
2
  import macro from '../../macros.js';
3
3
  import vtkShaderProgram from './ShaderProgram.js';
4
4
 
@@ -88,7 +88,7 @@ function vtkShaderCache(publicAPI, model) {
88
88
  publicAPI.getShaderProgram = function (vertexCode, fragmentCode, geometryCode) {
89
89
  // compute the MD5 and the check the map
90
90
  var hashInput = "".concat(vertexCode).concat(fragmentCode).concat(geometryCode);
91
- var result = md5(hashInput); // does it already exist?
91
+ var result = Md5.hash(hashInput); // does it already exist?
92
92
 
93
93
  var loc = Object.keys(model.shaderPrograms).indexOf(result);
94
94
 
@@ -78,7 +78,36 @@ function vtkOpenGLTexture(publicAPI, model) {
78
78
  publicAPI.sendParameters();
79
79
  model.textureBuildTime.modified();
80
80
  }
81
- } // if we have Inputdata
81
+ } // if we have a canvas
82
+
83
+
84
+ if (model.renderable.getCanvas() !== null) {
85
+ if (model.renderable.getInterpolate()) {
86
+ model.generateMipmap = true;
87
+ publicAPI.setMinificationFilter(Filter.LINEAR_MIPMAP_LINEAR);
88
+ }
89
+
90
+ var canvas = model.renderable.getCanvas();
91
+ publicAPI.create2DFromRaw(canvas.width, canvas.height, 4, VtkDataTypes.UNSIGNED_CHAR, canvas, true);
92
+ publicAPI.activate();
93
+ publicAPI.sendParameters();
94
+ model.textureBuildTime.modified();
95
+ } // if we have jsImageData
96
+
97
+
98
+ if (model.renderable.getJsImageData() !== null) {
99
+ var jsid = model.renderable.getJsImageData();
100
+
101
+ if (model.renderable.getInterpolate()) {
102
+ model.generateMipmap = true;
103
+ publicAPI.setMinificationFilter(Filter.LINEAR_MIPMAP_LINEAR);
104
+ }
105
+
106
+ publicAPI.create2DFromRaw(jsid.width, jsid.height, 4, VtkDataTypes.UNSIGNED_CHAR, jsid.data, true);
107
+ publicAPI.activate();
108
+ publicAPI.sendParameters();
109
+ model.textureBuildTime.modified();
110
+ } // if we have InputData
82
111
 
83
112
 
84
113
  var input = model.renderable.getInputData(0);
@@ -678,6 +707,7 @@ function vtkOpenGLTexture(publicAPI, model) {
678
707
 
679
708
 
680
709
  publicAPI.create2DFromRaw = function (width, height, numComps, dataType, data) {
710
+ var flip = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
681
711
  // Now determine the texture parameters using the arguments.
682
712
  publicAPI.getOpenGLDataType(dataType);
683
713
  publicAPI.getInternalFormat(dataType, numComps);
@@ -701,13 +731,18 @@ function vtkOpenGLTexture(publicAPI, model) {
701
731
  var dataArray = [data];
702
732
  var pixData = updateArrayDataType(dataType, dataArray);
703
733
  var scaledData = scaleTextureToHighestPowerOfTwo(pixData); // Source texture data from the PBO.
704
- // model.context.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
705
734
 
735
+ model.context.pixelStorei(model.context.UNPACK_FLIP_Y_WEBGL, flip);
706
736
  model.context.pixelStorei(model.context.UNPACK_ALIGNMENT, 1);
707
737
  model.context.texImage2D(model.target, 0, model.internalFormat, model.width, model.height, 0, model.format, model.openGLDataType, scaledData[0]);
708
738
 
709
739
  if (model.generateMipmap) {
710
740
  model.context.generateMipmap(model.target);
741
+ } // always reset the flip
742
+
743
+
744
+ if (flip) {
745
+ model.context.pixelStorei(model.context.UNPACK_FLIP_Y_WEBGL, false);
711
746
  }
712
747
 
713
748
  publicAPI.deactivate();
@@ -867,15 +902,7 @@ function vtkOpenGLTexture(publicAPI, model) {
867
902
  var ctx = canvas.getContext('2d');
868
903
  ctx.translate(0, canvas.height);
869
904
  ctx.scale(1, -1);
870
- ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height); // In Chrome 69 on Windows and Ubuntu, there is a bug that prevents some
871
- // canvases from working properly with webGL textures. By getting any
872
- // image data from the canvas, this works around the bug. See
873
- // https://bugs.chromium.org/p/chromium/issues/detail?id=896307
874
-
875
- if (navigator.userAgent.indexOf('Chrome/69') >= 0) {
876
- ctx.getImageData(0, 0, 1, 1);
877
- }
878
-
905
+ ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height);
879
906
  var safeImage = canvas;
880
907
  model.context.texImage2D(model.target, 0, model.internalFormat, model.format, model.openGLDataType, safeImage);
881
908
 
@@ -432,7 +432,7 @@ function vtkWebGPUPolyDataMapper(publicAPI, model) {
432
432
  var textures = actor.getTextures();
433
433
 
434
434
  for (var i = 0; i < textures.length; i++) {
435
- if (textures[i].getInputData()) {
435
+ if (textures[i].getInputData() || textures[i].getJsImageData() || textures[i].getCanvas()) {
436
436
  newTextures.push(textures[i]);
437
437
  }
438
438
 
@@ -445,7 +445,9 @@ function vtkWebGPUPolyDataMapper(publicAPI, model) {
445
445
 
446
446
  for (var _i = 0; _i < newTextures.length; _i++) {
447
447
  var srcTexture = newTextures[_i];
448
- var treq = {};
448
+ var treq = {
449
+ time: srcTexture.getMTime()
450
+ };
449
451
 
450
452
  if (srcTexture.getInputData()) {
451
453
  treq.imageData = srcTexture.getInputData();
@@ -453,6 +455,12 @@ function vtkWebGPUPolyDataMapper(publicAPI, model) {
453
455
  } else if (srcTexture.getImage()) {
454
456
  treq.image = srcTexture.getImage();
455
457
  treq.owner = treq.image;
458
+ } else if (srcTexture.getJsImageData()) {
459
+ treq.jsImageData = srcTexture.getJsImageData();
460
+ treq.owner = treq.jsImageData;
461
+ } else if (srcTexture.getCanvas()) {
462
+ treq.canvas = srcTexture.getCanvas();
463
+ treq.owner = treq.canvas;
456
464
  }
457
465
 
458
466
  var newTex = model.device.getTextureManager().getTexture(treq);
@@ -412,13 +412,17 @@ function vtkWebGPURenderWindow(publicAPI, model) {
412
412
  publicAPI.modified();
413
413
 
414
414
  if (resetCamera) {
415
- // If resetCamera was requested, we first save camera parameters
415
+ var isUserResetCamera = resetCamera !== true; // If resetCamera was requested, we first save camera parameters
416
416
  // from all the renderers, so we can restore them later
417
+
417
418
  model._screenshot.cameras = model.renderable.getRenderers().map(function (renderer) {
418
419
  var camera = renderer.getActiveCamera();
419
420
  var params = camera.get('focalPoint', 'position', 'parallelScale');
420
421
  return {
421
- resetCameraFn: renderer.resetCamera,
422
+ resetCameraArgs: isUserResetCamera ? {
423
+ renderer: renderer
424
+ } : undefined,
425
+ resetCameraFn: isUserResetCamera ? resetCamera : renderer.resetCamera,
422
426
  restoreParamsFn: camera.set,
423
427
  // "clone" the params so we don't keep refs to properties
424
428
  arg: JSON.parse(JSON.stringify(params))
@@ -428,8 +432,9 @@ function vtkWebGPURenderWindow(publicAPI, model) {
428
432
  // linked cameras among the renderers.
429
433
 
430
434
  model._screenshot.cameras.forEach(function (_ref4) {
431
- var resetCameraFn = _ref4.resetCameraFn;
432
- return resetCameraFn();
435
+ var resetCameraFn = _ref4.resetCameraFn,
436
+ resetCameraArgs = _ref4.resetCameraArgs;
437
+ return resetCameraFn(resetCameraArgs);
433
438
  });
434
439
  } // Trigger a render at the custom size
435
440
 
@@ -21,7 +21,7 @@ function vtkWebGPUTexture(publicAPI, model) {
21
21
  model.height = options.height;
22
22
  model.depth = options.depth ? options.depth : 1;
23
23
  var dimension = model.depth === 1 ? '2d' : '3d';
24
- model.format = options.format ? options.format : 'rgbaunorm';
24
+ model.format = options.format ? options.format : 'rgba8unorm';
25
25
  /* eslint-disable no-undef */
26
26
 
27
27
  /* eslint-disable no-bitwise */
@@ -47,7 +47,7 @@ function vtkWebGPUTexture(publicAPI, model) {
47
47
  model.width = options.width;
48
48
  model.height = options.height;
49
49
  model.depth = options.depth ? options.depth : 1;
50
- model.format = options.format ? options.format : 'rgbaunorm';
50
+ model.format = options.format ? options.format : 'rgba8unorm';
51
51
  /* eslint-disable no-undef */
52
52
 
53
53
  /* eslint-disable no-bitwise */
@@ -60,6 +60,27 @@ function vtkWebGPUTexture(publicAPI, model) {
60
60
 
61
61
 
62
62
  publicAPI.writeImageData = function (req) {
63
+ if (req.canvas) {
64
+ model.device.getHandle().queue.copyExternalImageToTexture({
65
+ source: req.canvas,
66
+ flipY: req.flip
67
+ }, {
68
+ texture: model.handle,
69
+ premultipliedAlpha: true
70
+ }, [model.width, model.height, model.depth]);
71
+ model.ready = true;
72
+ return;
73
+ }
74
+
75
+ if (req.jsImageData && !req.nativeArray) {
76
+ req.width = req.jsImageData.width;
77
+ req.height = req.jsImageData.height;
78
+ req.depth = 1;
79
+ req.format = 'rgba8unorm';
80
+ req.flip = true;
81
+ req.nativeArray = req.jsImageData.data;
82
+ }
83
+
63
84
  var tDetails = vtkWebGPUTypes.getDetailsFromTextureFormat(model.format);
64
85
  var bufferBytesPerRow = model.width * tDetails.stride;
65
86
 
@@ -64,11 +64,36 @@ function vtkWebGPUTextureManager(publicAPI, model) {
64
64
 
65
65
 
66
66
  if (req.image) {
67
- req.time = 0;
68
67
  req.width = req.image.width;
69
68
  req.height = req.image.height;
70
69
  req.depth = 1;
71
70
  req.format = 'rgba8unorm';
71
+ } // fill in based on js imageData
72
+
73
+
74
+ if (req.jsImageData) {
75
+ req.width = req.jsImageData.width;
76
+ req.height = req.jsImageData.height;
77
+ req.depth = 1;
78
+ req.format = 'rgba8unorm';
79
+ req.flip = true;
80
+ req.nativeArray = req.jsImageData.data;
81
+ }
82
+
83
+ if (req.canvas) {
84
+ req.width = req.canvas.width;
85
+ req.height = req.canvas.height;
86
+ req.depth = 1;
87
+ req.format = 'rgba8unorm';
88
+ req.flip = true;
89
+ /* eslint-disable no-undef */
90
+
91
+ /* eslint-disable no-bitwise */
92
+
93
+ req.usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT;
94
+ /* eslint-enable no-undef */
95
+
96
+ /* eslint-enable no-bitwise */
72
97
  }
73
98
  } // create a texture (used by getTexture)
74
99
 
@@ -79,10 +104,11 @@ function vtkWebGPUTextureManager(publicAPI, model) {
79
104
  width: req.width,
80
105
  height: req.height,
81
106
  depth: req.depth,
82
- format: req.format
107
+ format: req.format,
108
+ usage: req.usage
83
109
  }); // fill the texture if we have data
84
110
 
85
- if (req.nativeArray || req.image) {
111
+ if (req.nativeArray || req.image || req.canvas) {
86
112
  newTex.writeImageData(req);
87
113
  }
88
114
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitware/vtk.js",
3
- "version": "22.5.4",
3
+ "version": "22.5.7",
4
4
  "description": "Visualization Toolkit for the Web",
5
5
  "keywords": [
6
6
  "3d",
@@ -31,7 +31,6 @@
31
31
  "module": "./index.js",
32
32
  "dependencies": {
33
33
  "@babel/runtime": "7.16.7",
34
- "blueimp-md5": "2.19.0",
35
34
  "commander": "8.3.0",
36
35
  "d3-scale": "4.0.2",
37
36
  "gl-matrix": "3.4.3",
@@ -41,6 +40,7 @@
41
40
  "seedrandom": "3.0.5",
42
41
  "shader-loader": "1.3.1",
43
42
  "shelljs": "0.8.5",
43
+ "spark-md5": "^3.0.2",
44
44
  "stream-browserify": "3.0.0",
45
45
  "webworker-promise": "0.4.4",
46
46
  "worker-loader": "3.0.8",