@kitware/vtk.js 24.5.1 → 24.5.4

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 (192) 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/index.js +1 -1
  8. package/Common/Core/Math.d.ts +1 -1
  9. package/Common/Core/Math.js +1 -1
  10. package/Common/Core/MatrixBuilder.d.ts +1 -1
  11. package/Common/Core/Points.d.ts +2 -2
  12. package/Common/Core/PriorityQueue.d.ts +1 -1
  13. package/Common/Core/ProgressHandler.d.ts +1 -1
  14. package/Common/Core/ScalarsToColors.d.ts +3 -3
  15. package/Common/Core/StringArray.d.ts +1 -1
  16. package/Common/Core/VariantArray.d.ts +1 -1
  17. package/Common/DataModel/Box.d.ts +2 -2
  18. package/Common/DataModel/CardinalSpline1D.d.ts +1 -1
  19. package/Common/DataModel/Cell.d.ts +3 -3
  20. package/Common/DataModel/Cone.d.ts +2 -2
  21. package/Common/DataModel/Cylinder.d.ts +2 -2
  22. package/Common/DataModel/DataSet.d.ts +1 -1
  23. package/Common/DataModel/DataSetAttributes/FieldData.d.ts +4 -2
  24. package/Common/DataModel/DataSetAttributes.d.ts +3 -3
  25. package/Common/DataModel/ImageData.d.ts +1 -1
  26. package/Common/DataModel/Line.d.ts +1 -1
  27. package/Common/DataModel/PiecewiseFunction.d.ts +2 -2
  28. package/Common/DataModel/Plane.d.ts +2 -2
  29. package/Common/DataModel/PointSet.d.ts +2 -2
  30. package/Common/DataModel/PolyData.d.ts +2 -2
  31. package/Common/DataModel/Polygon.d.ts +2 -2
  32. package/Common/DataModel/SelectionNode.d.ts +2 -2
  33. package/Common/DataModel/Sphere.d.ts +2 -2
  34. package/Common/DataModel/Spline1D.d.ts +1 -1
  35. package/Common/DataModel/Spline3D.d.ts +1 -1
  36. package/Common/DataModel/Triangle.d.ts +1 -1
  37. package/Common/DataModel/Triangle.js +1 -1
  38. package/Common/Transform/LandmarkTransform.d.ts +2 -2
  39. package/Common/Transform/LandmarkTransform.js +1 -1
  40. package/Filters/Core/PolyDataNormals.js +1 -1
  41. package/Filters/General/AppendPolyData.d.ts +1 -1
  42. package/Filters/General/ImageCropFilter.d.ts +1 -1
  43. package/Filters/General/ImageOutlineFilter.d.ts +1 -1
  44. package/Filters/General/ImageSliceFilter.d.ts +1 -1
  45. package/Filters/General/ImageStreamline.d.ts +3 -3
  46. package/Filters/General/LineFilter.d.ts +1 -1
  47. package/Filters/General/OBBTree.js +1 -1
  48. package/Filters/General/OutlineFilter.d.ts +1 -1
  49. package/Filters/General/TriangleFilter.d.ts +1 -1
  50. package/Filters/General/TubeFilter.d.ts +2 -2
  51. package/Filters/General/WindowedSincPolyDataFilter.js +1 -1
  52. package/Filters/Sources/Arrow2DSource.d.ts +2 -2
  53. package/Filters/Sources/ArrowSource.d.ts +2 -2
  54. package/Filters/Sources/CircleSource.d.ts +2 -2
  55. package/Filters/Sources/CircleSource.js +1 -1
  56. package/Filters/Sources/ConeSource.d.ts +2 -2
  57. package/Filters/Sources/CubeSource.d.ts +2 -2
  58. package/Filters/Sources/Cursor3D.d.ts +3 -3
  59. package/Filters/Sources/CylinderSource.d.ts +2 -2
  60. package/Filters/Sources/LineSource.d.ts +2 -2
  61. package/Filters/Sources/PlaneSource.d.ts +2 -2
  62. package/Filters/Sources/PointSource.d.ts +2 -2
  63. package/Filters/Sources/PointSource.js +1 -1
  64. package/Filters/Sources/SphereSource.d.ts +2 -2
  65. package/Filters/Texture/TextureMapToPlane.d.ts +1 -1
  66. package/Filters/Texture/TextureMapToPlane.js +1 -1
  67. package/Filters/Texture/TextureMapToSphere.d.ts +1 -1
  68. package/IO/Core/DataAccessHelper.d.ts +4 -4
  69. package/IO/Core/HttpDataSetReader.d.ts +1 -1
  70. package/IO/Core/HttpSceneLoader.d.ts +5 -5
  71. package/IO/Core/ImageStream/DefaultProtocol.d.ts +1 -1
  72. package/IO/Core/ImageStream/ViewStream.d.ts +4 -4
  73. package/IO/Core/ImageStream.d.ts +3 -3
  74. package/IO/Core/WSLinkClient.d.ts +1 -1
  75. package/IO/Geometry/DracoReader.d.ts +5 -5
  76. package/IO/Geometry/PLYReader.d.ts +5 -5
  77. package/IO/Geometry/PLYWriter.d.ts +2 -2
  78. package/IO/Geometry/STLReader.d.ts +5 -5
  79. package/IO/Geometry/STLWriter.d.ts +2 -2
  80. package/IO/Misc/ElevationReader.d.ts +5 -5
  81. package/IO/Misc/ITKImageReader.d.ts +1 -1
  82. package/IO/Misc/ITKPolyDataReader.d.ts +1 -1
  83. package/IO/Misc/JSONNucleoReader.d.ts +5 -5
  84. package/IO/Misc/JSONReader.d.ts +1 -1
  85. package/IO/Misc/MTLReader.d.ts +6 -6
  86. package/IO/Misc/OBJReader.d.ts +5 -5
  87. package/IO/Misc/PDBReader.d.ts +5 -5
  88. package/IO/XML/XMLReader.d.ts +5 -5
  89. package/Interaction/Manipulators/MouseCameraTrackballRollManipulator.js +1 -1
  90. package/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js +1 -1
  91. package/Interaction/Manipulators/MouseCameraUnicamManipulator.js +1 -1
  92. package/Interaction/Manipulators/MouseCameraUnicamRotateManipulator.js +1 -1
  93. package/Interaction/Style/InteractorStyleTrackballCamera.js +1 -1
  94. package/Interaction/Widgets/OrientationMarkerWidget.d.ts +6 -6
  95. package/Interaction/Widgets/PiecewiseGaussianWidget.js +1 -1
  96. package/Proxy/Core/View2DProxy.js +1 -1
  97. package/Rendering/Core/AbstractMapper.d.ts +2 -2
  98. package/Rendering/Core/AbstractMapper3D.d.ts +1 -1
  99. package/Rendering/Core/AbstractPicker.d.ts +2 -2
  100. package/Rendering/Core/Actor.d.ts +1 -1
  101. package/Rendering/Core/Actor2D.d.ts +1 -1
  102. package/Rendering/Core/Camera.d.ts +2 -2
  103. package/Rendering/Core/CellPicker.d.ts +2 -2
  104. package/Rendering/Core/ColorTransferFunction.d.ts +1 -1
  105. package/Rendering/Core/ColorTransferFunction.js +1 -1
  106. package/Rendering/Core/Coordinate.d.ts +1 -1
  107. package/Rendering/Core/Coordinate.js +1 -1
  108. package/Rendering/Core/CubeAxesActor.js +1 -1
  109. package/Rendering/Core/Glyph3DMapper.d.ts +1 -1
  110. package/Rendering/Core/Glyph3DMapper.js +1 -1
  111. package/Rendering/Core/ImageMapper.d.ts +1 -1
  112. package/Rendering/Core/ImageMapper.js +1 -1
  113. package/Rendering/Core/ImageProperty.d.ts +1 -1
  114. package/Rendering/Core/ImageSlice.d.ts +1 -1
  115. package/Rendering/Core/Light.d.ts +2 -2
  116. package/Rendering/Core/Mapper.d.ts +1 -1
  117. package/Rendering/Core/Mapper.js +1 -1
  118. package/Rendering/Core/Mapper2D.d.ts +1 -1
  119. package/Rendering/Core/Picker.d.ts +1 -1
  120. package/Rendering/Core/PointPicker.d.ts +1 -1
  121. package/Rendering/Core/Prop.d.ts +1 -1
  122. package/Rendering/Core/Prop3D.d.ts +1 -1
  123. package/Rendering/Core/Prop3D.js +1 -1
  124. package/Rendering/Core/Property.d.ts +2 -2
  125. package/Rendering/Core/Property2D.d.ts +2 -2
  126. package/Rendering/Core/RenderWindow.d.ts +2 -2
  127. package/Rendering/Core/RenderWindowInteractor.d.ts +123 -109
  128. package/Rendering/Core/RenderWindowInteractor.js +1 -1
  129. package/Rendering/Core/Renderer.d.ts +1 -1
  130. package/Rendering/Core/Renderer.js +1 -1
  131. package/Rendering/Core/ScalarBarActor.d.ts +2 -2
  132. package/Rendering/Core/ScalarBarActor.js +3 -3
  133. package/Rendering/Core/Texture.d.ts +1 -1
  134. package/Rendering/Core/Viewport.d.ts +2 -2
  135. package/Rendering/Core/Volume.d.ts +1 -1
  136. package/Rendering/Core/VolumeMapper.d.ts +1 -1
  137. package/Rendering/Core/VolumeMapper.js +1 -1
  138. package/Rendering/Core/VolumeProperty.d.ts +1 -1
  139. package/Rendering/Misc/CanvasView.d.ts +2 -2
  140. package/Rendering/Misc/FullScreenRenderWindow.d.ts +8 -8
  141. package/Rendering/Misc/GenericRenderWindow.d.ts +6 -6
  142. package/Rendering/Misc/RemoteView.d.ts +2 -2
  143. package/Rendering/Misc/RenderWindowWithControlBar.d.ts +1 -1
  144. package/Rendering/Misc/SynchronizableRenderWindow.d.ts +2 -2
  145. package/Rendering/Misc/TextureLODsDownloader.d.ts +3 -3
  146. package/Rendering/OpenGL/OrderIndependentTranslucentPass.js +5 -1
  147. package/Rendering/OpenGL/PolyDataMapper2D.js +1 -1
  148. package/Rendering/OpenGL/RenderWindow.d.ts +7 -7
  149. package/Rendering/OpenGL/Texture.js +1 -1
  150. package/Rendering/OpenGL/VolumeMapper.js +1 -1
  151. package/Rendering/SceneGraph/RenderPass.d.ts +1 -1
  152. package/Rendering/SceneGraph/ViewNode.d.ts +1 -1
  153. package/Rendering/SceneGraph/ViewNode.js +28 -2
  154. package/Rendering/SceneGraph/ViewNodeFactory.d.ts +1 -1
  155. package/Rendering/WebGPU/CellArrayMapper.js +629 -0
  156. package/Rendering/WebGPU/FullScreenQuad.js +4 -6
  157. package/Rendering/WebGPU/Glyph3DMapper.js +60 -27
  158. package/Rendering/WebGPU/ImageMapper.js +23 -60
  159. package/Rendering/WebGPU/OrderIndependentTranslucentPass.js +4 -6
  160. package/Rendering/WebGPU/Pipeline.js +12 -0
  161. package/Rendering/WebGPU/PolyDataMapper.js +49 -623
  162. package/Rendering/WebGPU/RenderEncoder.js +34 -0
  163. package/Rendering/WebGPU/Renderer.js +4 -62
  164. package/Rendering/WebGPU/ShaderDescription.js +6 -6
  165. package/Rendering/WebGPU/{MapperHelper.js → SimpleMapper.js} +64 -38
  166. package/Rendering/WebGPU/SphereMapper.js +41 -37
  167. package/Rendering/WebGPU/StickMapper.js +35 -30
  168. package/Rendering/WebGPU/StorageBuffer.js +2 -2
  169. package/Rendering/WebGPU/UniformBuffer.js +1 -1
  170. package/Rendering/WebGPU/Volume.js +1 -14
  171. package/Rendering/WebGPU/VolumePass.js +15 -19
  172. package/Rendering/WebGPU/VolumePassFSQ.js +19 -25
  173. package/Widgets/Manipulators/LineManipulator.d.ts +1 -1
  174. package/Widgets/Manipulators/LineManipulator.js +1 -1
  175. package/Widgets/Manipulators/PlaneManipulator.d.ts +1 -1
  176. package/Widgets/Manipulators/TrackballManipulator.d.ts +1 -1
  177. package/Widgets/Representations/PolyLineRepresentation.js +1 -1
  178. package/Widgets/Representations/ResliceCursorContextRepresentation.js +1 -1
  179. package/Widgets/Representations/WidgetRepresentation.d.ts +1 -1
  180. package/Widgets/Widgets3D/AngleWidget.js +1 -1
  181. package/Widgets/Widgets3D/LineWidget/helpers.js +1 -1
  182. package/Widgets/Widgets3D/ResliceCursorWidget/behavior.js +1 -1
  183. package/Widgets/Widgets3D/ResliceCursorWidget/helpers.js +1 -1
  184. package/Widgets/Widgets3D/ResliceCursorWidget.js +1 -1
  185. package/Widgets/Widgets3D/ShapeWidget/behavior.js +1 -1
  186. package/Widgets/Widgets3D/SphereWidget.d.ts +2 -2
  187. package/index.d.ts +2 -2
  188. package/interfaces.d.ts +2 -2
  189. package/macros.d.ts +1 -1
  190. package/package.json +1 -1
  191. package/types.d.ts +1 -1
  192. package/tsconfig.json +0 -8
@@ -1,618 +1,90 @@
1
- import { mat3, mat4 } from 'gl-matrix';
2
- import { newInstance as newInstance$1, get, setGet } from '../../macros.js';
3
- import vtkMapper from '../Core/Mapper.js';
4
- import vtkProperty from '../Core/Property.js';
5
- import vtkTexture from '../Core/Texture.js';
1
+ import { newInstance as newInstance$1 } from '../../macros.js';
6
2
  import vtkWebGPUBufferManager from './BufferManager.js';
7
- import vtkWebGPUShaderCache from './ShaderCache.js';
8
- import vtkWebGPUUniformBuffer from './UniformBuffer.js';
9
- import vtkWebGPUMapperHelper from './MapperHelper.js';
3
+ import vtkWebGPUCellArrayMapper from './CellArrayMapper.js';
10
4
  import vtkViewNode from '../SceneGraph/ViewNode.js';
11
5
  import { registerOverride } from './ViewNodeFactory.js';
12
6
 
13
- var BufferUsage = vtkWebGPUBufferManager.BufferUsage,
14
- PrimitiveTypes = vtkWebGPUBufferManager.PrimitiveTypes;
15
- var Representation = vtkProperty.Representation;
16
- var ScalarMode = vtkMapper.ScalarMode;
17
- var StartEvent = {
18
- type: 'StartEvent'
19
- };
20
- var EndEvent = {
21
- type: 'EndEvent'
22
- };
23
- var vtkWebGPUPolyDataVS = "\n//VTK::Renderer::Dec\n\n//VTK::Color::Dec\n\n//VTK::Normal::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Select::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@stage(vertex)\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : vertexOutput;\n\n var vertex: vec4<f32> = vertexBC;\n\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Select::Impl\n\n //VTK::Position::Impl\n\n return output;\n}\n";
24
- var vtkWebGPUPolyDataFS = "\n//VTK::Renderer::Dec\n\n//VTK::Color::Dec\n\n// optional surface normal declaration\n//VTK::Normal::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Select::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::Mapper::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 var ambientColor: vec4<f32> = mapperUBO.AmbientColor;\n var diffuseColor: vec4<f32> = mapperUBO.DiffuseColor;\n var opacity: f32 = mapperUBO.Opacity;\n\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::Light::Impl\n\n var computedColor: vec4<f32> = vec4<f32>(ambientColor.rgb * mapperUBO.AmbientIntensity\n + diffuse * mapperUBO.DiffuseIntensity\n + specular * mapperUBO.SpecularIntensity,\n opacity);\n\n //VTK::TCoord::Impl\n\n //VTK::Select::Impl\n\n if (computedColor.a == 0.0) { discard; };\n\n //VTK::Position::Impl\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n";
25
-
26
- function isEdges(hash) {
27
- // edge pipelines have "edge" in them
28
- return hash.indexOf('edge') >= 0;
29
- } // ----------------------------------------------------------------------------
7
+ var PrimitiveTypes = vtkWebGPUBufferManager.PrimitiveTypes; // ----------------------------------------------------------------------------
30
8
  // vtkWebGPUPolyDataMapper methods
31
9
  // ----------------------------------------------------------------------------
32
10
 
33
-
34
11
  function vtkWebGPUPolyDataMapper(publicAPI, model) {
35
12
  // Set our className
36
13
  model.classHierarchy.push('vtkWebGPUPolyDataMapper');
37
14
 
38
- publicAPI.buildPass = function (prepass) {
39
- if (prepass) {
40
- model.WebGPUActor = publicAPI.getFirstAncestorOfType('vtkWebGPUActor');
41
- model.WebGPURenderer = model.WebGPUActor.getFirstAncestorOfType('vtkWebGPURenderer');
42
- model.WebGPURenderWindow = model.WebGPURenderer.getParent();
43
- model.device = model.WebGPURenderWindow.getDevice();
44
- }
45
- }; // Renders myself
46
-
47
-
48
- publicAPI.translucentPass = function (prepass) {
49
- if (prepass) {
50
- publicAPI.render();
51
- }
15
+ publicAPI.createCellArrayMapper = function () {
16
+ return vtkWebGPUCellArrayMapper.newInstance();
52
17
  };
53
18
 
54
- publicAPI.opaquePass = function (prepass) {
19
+ publicAPI.buildPass = function (prepass) {
55
20
  if (prepass) {
56
- publicAPI.render();
57
- }
58
- };
59
-
60
- publicAPI.updateUBO = function () {
61
- // make sure the data is up to date
62
- var actor = model.WebGPUActor.getRenderable();
63
- var ppty = actor.getProperty();
64
- var utime = model.UBO.getSendTime();
65
-
66
- if (publicAPI.getMTime() > utime || ppty.getMTime() > utime || model.renderable.getMTime() > utime) {
67
- var keyMats = model.WebGPUActor.getKeyMatrices(model.WebGPURenderer);
68
- model.UBO.setArray('BCWCMatrix', keyMats.bcwc);
69
- model.UBO.setArray('BCSCMatrix', keyMats.bcsc);
70
- model.UBO.setArray('MCWCNormals', keyMats.normalMatrix);
71
- var aColor = ppty.getAmbientColorByReference();
72
- model.UBO.setValue('AmbientIntensity', ppty.getAmbient());
73
- model.UBO.setArray('AmbientColor', [aColor[0], aColor[1], aColor[2], 1.0]);
74
- model.UBO.setValue('DiffuseIntensity', ppty.getDiffuse());
75
- aColor = ppty.getDiffuseColorByReference();
76
- model.UBO.setArray('DiffuseColor', [aColor[0], aColor[1], aColor[2], 1.0]);
77
- model.UBO.setValue('SpecularIntensity', ppty.getSpecular());
78
- model.UBO.setValue('SpecularPower', ppty.getSpecularPower());
79
- aColor = ppty.getSpecularColorByReference();
80
- model.UBO.setArray('SpecularColor', [aColor[0], aColor[1], aColor[2], 1.0]);
81
- aColor = ppty.getEdgeColorByReference();
82
- model.UBO.setArray('EdgeColor', [aColor[0], aColor[1], aColor[2], 1.0]);
83
- model.UBO.setValue('Opacity', ppty.getOpacity());
84
- model.UBO.setValue('PropID', model.WebGPUActor.getPropID());
85
- var device = model.WebGPURenderWindow.getDevice();
86
- model.UBO.sendIfNeeded(device);
87
- }
88
- };
89
-
90
- publicAPI.render = function () {
91
- publicAPI.invokeEvent(StartEvent);
92
-
93
- if (!model.renderable.getStatic()) {
94
- model.renderable.update();
95
- }
96
-
97
- model.currentInput = model.renderable.getInputData();
98
- publicAPI.invokeEvent(EndEvent);
99
- model.renderEncoder = model.WebGPURenderer.getRenderEncoder();
100
- publicAPI.buildPrimitives(); // update descriptor sets
101
-
102
- publicAPI.updateUBO();
103
- };
104
-
105
- publicAPI.replaceShaderPosition = function (hash, pipeline, vertexInput) {
106
- var vDesc = pipeline.getShaderDescription('vertex');
107
- vDesc.addBuiltinOutput('vec4<f32>', '@builtin(position) Position');
108
- var code = vDesc.getCode();
109
-
110
- if (isEdges(hash)) {
111
- vDesc.addBuiltinInput('u32', '@builtin(instance_index) instanceIndex'); // widen the edge
112
-
113
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::Position::Impl', [' var tmpPos: vec4<f32> = rendererUBO.SCPCMatrix*mapperUBO.BCSCMatrix*vertexBC;', ' var tmpPos2: vec3<f32> = tmpPos.xyz / tmpPos.w;', ' tmpPos2.x = tmpPos2.x + 1.4*(f32(input.instanceIndex % 2u) - 0.5)/rendererUBO.viewportSize.x;', ' tmpPos2.y = tmpPos2.y + 1.4*(f32(input.instanceIndex / 2u) - 0.5)/rendererUBO.viewportSize.y;', ' tmpPos2.z = tmpPos2.z + 0.00001;', // could become a setting
114
- ' output.Position = vec4<f32>(tmpPos2.xyz * tmpPos.w, tmpPos.w);']).result;
115
- } else {
116
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::Position::Impl', [' output.Position = rendererUBO.SCPCMatrix*mapperUBO.BCSCMatrix*vertexBC;']).result;
117
- }
118
-
119
- vDesc.setCode(code);
120
- };
121
-
122
- publicAPI.replaceShaderNormal = function (hash, pipeline, vertexInput) {
123
- if (vertexInput.hasAttribute('normalMC')) {
124
- var vDesc = pipeline.getShaderDescription('vertex');
125
- vDesc.addOutput('vec3<f32>', 'normalVC');
126
- var code = vDesc.getCode();
127
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::Normal::Impl', [' output.normalVC = normalize((rendererUBO.WCVCNormals * mapperUBO.MCWCNormals * normalMC).xyz);']).result;
128
- vDesc.setCode(code);
129
- var fDesc = pipeline.getShaderDescription('fragment');
130
- code = fDesc.getCode();
131
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::Normal::Impl', [' var normal: vec3<f32> = input.normalVC;', ' if (!input.frontFacing) { normal = -normal; }']).result;
132
- fDesc.setCode(code);
133
- }
134
- }; // we only apply lighting when there is a "var normal" declaration in the
135
- // fragment shader code. That is the lighting trigger.
136
-
137
-
138
- publicAPI.replaceShaderLight = function (hash, pipeline, vertexInput) {
139
- var fDesc = pipeline.getShaderDescription('fragment');
140
- var code = fDesc.getCode();
141
-
142
- if (code.includes('var normal')) {
143
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::Light::Impl', [' var df: f32 = max(0.0, normal.z);', ' var sf: f32 = pow(df, mapperUBO.SpecularPower);', ' var diffuse: vec3<f32> = df * diffuseColor.rgb;', ' var specular: vec3<f32> = sf * mapperUBO.SpecularColor.rgb * mapperUBO.SpecularColor.a;']).result;
144
- fDesc.setCode(code);
145
- } else {
146
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::Light::Impl', [' var diffuse: vec3<f32> = diffuseColor.rgb;', ' var specular: vec3<f32> = mapperUBO.SpecularColor.rgb * mapperUBO.SpecularColor.a;']).result;
147
- fDesc.setCode(code);
148
- }
149
- };
150
-
151
- publicAPI.replaceShaderColor = function (hash, pipeline, vertexInput) {
152
- if (isEdges(hash)) {
153
- var _fDesc = pipeline.getShaderDescription('fragment');
154
-
155
- var _code = _fDesc.getCode();
156
-
157
- _code = vtkWebGPUShaderCache.substitute(_code, '//VTK::Color::Impl', ['ambientColor = mapperUBO.EdgeColor;', 'diffuseColor = mapperUBO.EdgeColor;']).result;
158
-
159
- _fDesc.setCode(_code);
160
-
161
- return;
162
- }
163
-
164
- if (!vertexInput.hasAttribute('colorVI')) return;
165
- var vDesc = pipeline.getShaderDescription('vertex');
166
- vDesc.addOutput('vec4<f32>', 'color');
167
- var code = vDesc.getCode();
168
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::Color::Impl', [' output.color = colorVI;']).result;
169
- vDesc.setCode(code);
170
- var fDesc = pipeline.getShaderDescription('fragment');
171
- code = fDesc.getCode();
172
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::Color::Impl', ['ambientColor = input.color;', 'diffuseColor = input.color;', 'opacity = mapperUBO.Opacity * input.color.a;']).result;
173
- fDesc.setCode(code);
174
- };
175
-
176
- publicAPI.replaceShaderTCoord = function (hash, pipeline, vertexInput) {
177
- if (!vertexInput.hasAttribute('tcoord')) return;
178
- var vDesc = pipeline.getShaderDescription('vertex');
179
- vDesc.addOutput('vec2<f32>', 'tcoordVS');
180
- var code = vDesc.getCode();
181
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::TCoord::Impl', [' output.tcoordVS = tcoord;']).result;
182
- vDesc.setCode(code);
183
- var fDesc = pipeline.getShaderDescription('fragment');
184
- code = fDesc.getCode(); // todo handle multiple textures? Blend multiply ?
185
-
186
- if (model.textures.length) {
187
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::TCoord::Impl', ['var tcolor: vec4<f32> = textureSample(Texture0, Texture0Sampler, input.tcoordVS);', 'computedColor = computedColor*tcolor;']).result;
188
- }
189
-
190
- fDesc.setCode(code);
191
- };
192
-
193
- publicAPI.replaceShaderSelect = function (hash, pipeline, vertexInput) {
194
- if (hash.includes('sel')) {
195
- var fDesc = pipeline.getShaderDescription('fragment');
196
- var code = fDesc.getCode(); // by default there are no composites, so just 0
197
-
198
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::Select::Impl', [' var compositeID: u32 = 0u;']).result;
199
- fDesc.setCode(code);
200
- }
201
- };
202
-
203
- publicAPI.getUsage = function (rep, i) {
204
- if (rep === Representation.POINTS || i === PrimitiveTypes.Points) {
205
- return BufferUsage.Verts;
206
- }
207
-
208
- if (i === PrimitiveTypes.Lines) {
209
- return BufferUsage.Lines;
210
- }
21
+ model.WebGPUActor = publicAPI.getFirstAncestorOfType('vtkWebGPUActor');
211
22
 
212
- if (rep === Representation.WIREFRAME) {
213
- if (i === PrimitiveTypes.Triangles) {
214
- return BufferUsage.LinesFromTriangles;
23
+ if (!model.renderable.getStatic()) {
24
+ model.renderable.update();
215
25
  }
216
26
 
217
- return BufferUsage.LinesFromStrips;
218
- }
219
-
220
- if (i === PrimitiveTypes.Triangles) {
221
- return BufferUsage.Triangles;
222
- }
223
-
224
- if (i === PrimitiveTypes.TriangleStrips) {
225
- return BufferUsage.Strips;
226
- }
227
-
228
- if (i === PrimitiveTypes.TriangleEdges) {
229
- return BufferUsage.LinesFromTriangles;
230
- } // only strip edges left which are lines
231
-
232
-
233
- return BufferUsage.LinesFromStrips;
234
- };
235
-
236
- publicAPI.getHashFromUsage = function (usage) {
237
- return "pt".concat(usage);
238
- };
239
-
240
- publicAPI.getTopologyFromUsage = function (usage) {
241
- switch (usage) {
242
- case BufferUsage.Triangles:
243
- return 'triangle-list';
244
-
245
- case BufferUsage.Verts:
246
- return 'point-list';
247
-
248
- case BufferUsage.Lines:
249
- default:
250
- return 'line-list';
27
+ var poly = model.renderable.getInputData();
28
+ model.renderable.mapScalars(poly, 1.0);
29
+ publicAPI.updateCellArrayMappers(poly);
251
30
  }
252
31
  };
253
32
 
254
- publicAPI.buildVertexInput = function (pd, cells, primType) {
255
- var actor = model.WebGPUActor.getRenderable();
256
- var representation = actor.getProperty().getRepresentation();
257
- var device = model.WebGPURenderWindow.getDevice();
258
- var edges = false;
259
-
260
- if (primType === PrimitiveTypes.TriangleEdges) {
261
- edges = true;
262
- representation = Representation.WIREFRAME;
263
- }
33
+ publicAPI.updateCellArrayMappers = function (poly) {
34
+ var prims = [poly.getVerts(), poly.getLines(), poly.getPolys(), poly.getStrips()]; // we instantiate a cell array mapper for each cellArray that has cells
35
+ // and they handle the rendering of that cell array
264
36
 
265
- var vertexInput = model.primitives[primType].getVertexInput();
266
- var hash = "R".concat(representation, "P").concat(primType); // hash = all things that can change the values on the buffer
267
- // since mtimes are unique we can use
268
- // - cells mtime - because cells drive how we pack
269
- // - rep (point/wireframe/surface) - again because of packing
270
- // - relevant dataArray mtime - the source data
271
- // - shift - not currently captured
272
- // - scale - not currently captured
273
- // - format
274
- // - usage
275
- // - packExtra - covered by format
276
- // - prim type (vert/lines/polys/strips) - covered by cells mtime
277
- // points
37
+ var cellMappers = [];
38
+ var cellOffset = 0;
278
39
 
279
- var points = pd.getPoints();
280
-
281
- if (points) {
282
- var shift = model.WebGPUActor.getBufferShift(model.WebGPURenderer);
283
- var buffRequest = {
284
- owner: points,
285
- usage: BufferUsage.PointArray,
286
- format: 'float32x4',
287
- time: Math.max(points.getMTime(), cells.getMTime(), model.WebGPUActor.getKeyMatricesTime().getMTime()),
288
- hash: hash,
289
- dataArray: points,
290
- cells: cells,
291
- primitiveType: primType,
292
- representation: representation,
293
- shift: shift,
294
- packExtra: true
295
- };
296
- var buff = device.getBufferManager().getBuffer(buffRequest);
297
- vertexInput.addBuffer(buff, ['vertexBC']);
298
- } else {
299
- vertexInput.removeBufferIfPresent('vertexBC');
300
- } // normals, only used for surface rendering
301
-
302
-
303
- var usage = publicAPI.getUsage(representation, primType);
304
-
305
- if (usage === BufferUsage.Triangles || usage === BufferUsage.Strips) {
306
- var normals = pd.getPointData().getNormals();
307
- var _buffRequest = {
308
- format: 'snorm8x4',
309
- hash: hash,
310
- cells: cells,
311
- representation: representation,
312
- primitiveType: primType,
313
- packExtra: true,
314
- shift: 0,
315
- scale: 127
316
- };
317
-
318
- if (normals) {
319
- _buffRequest.owner = normals;
320
- _buffRequest.dataArray = normals;
321
- _buffRequest.time = Math.max(normals.getMTime(), cells.getMTime());
322
- _buffRequest.usage = BufferUsage.PointArray;
323
-
324
- var _buff = device.getBufferManager().getBuffer(_buffRequest);
325
-
326
- vertexInput.addBuffer(_buff, ['normalMC']);
327
- } else if (primType === PrimitiveTypes.Triangles) {
328
- _buffRequest.owner = points;
329
- _buffRequest.dataArray = points;
330
- _buffRequest.time = Math.max(points.getMTime(), cells.getMTime());
331
- _buffRequest.usage = BufferUsage.NormalsFromPoints;
332
-
333
- var _buff2 = device.getBufferManager().getBuffer(_buffRequest);
334
-
335
- vertexInput.addBuffer(_buff2, ['normalMC']);
336
- } else {
337
- vertexInput.removeBufferIfPresent('normalMC');
338
- }
339
- } else {
340
- vertexInput.removeBufferIfPresent('normalMC');
341
- } // deal with colors but only if modified
342
-
343
-
344
- var haveColors = false;
345
-
346
- if (model.renderable.getScalarVisibility()) {
347
- var c = model.renderable.getColorMapColors();
348
-
349
- if (c && !edges) {
350
- var scalarMode = model.renderable.getScalarMode();
351
- var haveCellScalars = false; // We must figure out how the scalars should be mapped to the polydata.
352
-
353
- if ((scalarMode === ScalarMode.USE_CELL_DATA || scalarMode === ScalarMode.USE_CELL_FIELD_DATA || scalarMode === ScalarMode.USE_FIELD_DATA || !pd.getPointData().getScalars()) && scalarMode !== ScalarMode.USE_POINT_FIELD_DATA && c) {
354
- haveCellScalars = true;
40
+ for (var i = PrimitiveTypes.Points; i <= PrimitiveTypes.Triangles; i++) {
41
+ if (prims[i].getNumberOfValues() > 0) {
42
+ if (!model.primitives[i]) {
43
+ model.primitives[i] = publicAPI.createCellArrayMapper();
355
44
  }
356
45
 
357
- var _buffRequest2 = {
358
- owner: c,
359
- usage: BufferUsage.PointArray,
360
- format: 'unorm8x4',
361
- time: Math.max(c.getMTime(), cells.getMTime(), points.getMTime()),
362
- hash: hash + haveCellScalars,
363
- dataArray: c,
364
- cells: cells,
365
- primitiveType: primType,
366
- representation: representation,
367
- cellData: haveCellScalars,
368
- cellOffset: 0
369
- };
370
-
371
- var _buff3 = device.getBufferManager().getBuffer(_buffRequest2);
372
-
373
- vertexInput.addBuffer(_buff3, ['colorVI']);
374
- haveColors = true;
375
- }
376
- }
377
-
378
- if (!haveColors) {
379
- vertexInput.removeBufferIfPresent('colorVI');
380
- }
381
-
382
- var tcoords = null;
383
-
384
- if (model.renderable.getInterpolateScalarsBeforeMapping() && model.renderable.getColorCoordinates()) {
385
- tcoords = model.renderable.getColorCoordinates();
386
- } else {
387
- tcoords = pd.getPointData().getTCoords();
388
- }
389
-
390
- if (tcoords && !edges) {
391
- var _buffRequest3 = {
392
- owner: tcoords,
393
- usage: BufferUsage.PointArray,
394
- format: 'float32x2',
395
- time: Math.max(tcoords.getMTime(), cells.getMTime()),
396
- hash: hash,
397
- dataArray: tcoords,
398
- cells: cells,
399
- primitiveType: primType,
400
- representation: representation
401
- };
402
-
403
- var _buff4 = device.getBufferManager().getBuffer(_buffRequest3);
404
-
405
- vertexInput.addBuffer(_buff4, ['tcoord']);
406
- } else {
407
- vertexInput.removeBufferIfPresent('tcoord');
408
- }
409
- };
410
-
411
- publicAPI.updateTextures = function () {
412
- // we keep track of new and used textures so
413
- // that we can clean up any unused textures so we don't hold onto them
414
- var usedTextures = [];
415
- var newTextures = []; // do we have a scalar color texture
416
-
417
- var idata = model.renderable.getColorTextureMap(); // returns an imagedata
418
-
419
- if (idata) {
420
- if (!model.colorTexture) {
421
- model.colorTexture = vtkTexture.newInstance({
422
- label: 'polyDataColor'
423
- });
424
- }
425
-
426
- model.colorTexture.setInputData(idata);
427
- newTextures.push(model.colorTexture);
428
- } // actor textures?
429
-
430
-
431
- var actor = model.WebGPUActor.getRenderable();
432
- var textures = actor.getTextures();
433
-
434
- for (var i = 0; i < textures.length; i++) {
435
- if (textures[i].getInputData() || textures[i].getJsImageData() || textures[i].getCanvas()) {
436
- newTextures.push(textures[i]);
437
- }
438
-
439
- if (textures[i].getImage() && textures[i].getImageLoaded()) {
440
- newTextures.push(textures[i]);
46
+ var cellMapper = model.primitives[i];
47
+ cellMapper.setCellArray(prims[i]);
48
+ cellMapper.setCurrentInput(poly);
49
+ cellMapper.setCellOffset(cellOffset);
50
+ cellMapper.setPrimitiveType(i);
51
+ cellMapper.setRenderable(model.renderable);
52
+ cellOffset += prims[i].getNumberOfCells();
53
+ cellMappers.push(cellMapper);
54
+ } else {
55
+ model.primitives[i] = null;
441
56
  }
442
57
  }
443
58
 
444
- var usedCount = 0;
445
-
446
- for (var _i = 0; _i < newTextures.length; _i++) {
447
- var srcTexture = newTextures[_i];
448
- var treq = {
449
- time: srcTexture.getMTime()
450
- };
451
-
452
- if (srcTexture.getInputData()) {
453
- treq.imageData = srcTexture.getInputData();
454
- treq.owner = treq.imageData.getPointData().getScalars();
455
- } else if (srcTexture.getImage()) {
456
- treq.image = srcTexture.getImage();
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;
464
- }
465
-
466
- var newTex = model.device.getTextureManager().getTexture(treq);
467
-
468
- if (newTex.getReady()) {
469
- // is this a new texture
470
- var found = false;
471
-
472
- for (var t = 0; t < model.textures.length; t++) {
473
- if (model.textures[t] === newTex) {
474
- usedCount++;
475
- found = true;
476
- usedTextures[t] = true;
59
+ if (model.WebGPUActor.getRenderable().getProperty().getEdgeVisibility()) {
60
+ for (var _i = PrimitiveTypes.TriangleEdges; _i <= PrimitiveTypes.TriangleStripEdges; _i++) {
61
+ if (prims[_i - 2].getNumberOfValues() > 0) {
62
+ if (!model.primitives[_i]) {
63
+ model.primitives[_i] = publicAPI.createCellArrayMapper();
477
64
  }
478
- }
479
-
480
- if (!found) {
481
- usedTextures[model.textures.length] = true;
482
- var tview = newTex.createView("Texture".concat(usedCount++));
483
- model.textures.push(newTex);
484
- model.textureViews.push(tview);
485
- var interpolate = srcTexture.getInterpolate() ? 'linear' : 'nearest';
486
- tview.addSampler(model.device, {
487
- minFilter: interpolate,
488
- magFilter: interpolate
489
- });
490
- }
491
- }
492
- } // remove unused textures
493
-
494
-
495
- for (var _i2 = model.textures.length - 1; _i2 >= 0; _i2--) {
496
- if (!usedTextures[_i2]) {
497
- model.textures.splice(_i2, 1);
498
- model.textureViews.splice(_i2, 1);
499
- }
500
- }
501
- }; // compute a unique hash for a pipeline, this needs to be unique enough to
502
- // capture any pipeline code changes (which includes shader changes)
503
- // or vertex input changes/ bind groups/ etc
504
-
505
-
506
- publicAPI.computePipelineHash = function (vertexInput, usage, edges) {
507
- var pipelineHash = 'pd';
508
-
509
- if (edges) {
510
- pipelineHash += 'edge';
511
- } else {
512
- if (vertexInput.hasAttribute("normalMC")) {
513
- pipelineHash += "n";
514
- }
515
-
516
- if (vertexInput.hasAttribute("colorVI")) {
517
- pipelineHash += "c";
518
- }
519
-
520
- if (vertexInput.hasAttribute("tcoord")) {
521
- pipelineHash += "t";
522
- }
523
-
524
- if (model.textures.length) {
525
- pipelineHash += "tx".concat(model.textures.length);
526
- }
527
- }
528
-
529
- if (model.SSBO) {
530
- pipelineHash += "ssbo";
531
- }
532
-
533
- var uhash = publicAPI.getHashFromUsage(usage);
534
- pipelineHash += uhash;
535
- pipelineHash += model.renderEncoder.getPipelineHash();
536
- return pipelineHash;
537
- }; // was originally buildIBOs() but not using IBOs right now
538
-
539
-
540
- publicAPI.buildPrimitives = function () {
541
- var poly = model.currentInput;
542
- var prims = [poly.getVerts(), poly.getLines(), poly.getPolys(), poly.getStrips()];
543
- var device = model.WebGPURenderWindow.getDevice();
544
- model.renderable.mapScalars(poly, 1.0); // handle textures
545
65
 
546
- publicAPI.updateTextures();
547
- var actor = model.WebGPUActor.getRenderable();
548
- var rep = actor.getProperty().getRepresentation();
549
- var edgeVisibility = actor.getProperty().getEdgeVisibility(); // handle per primitive type
66
+ var _cellMapper = model.primitives[_i];
550
67
 
551
- for (var i = PrimitiveTypes.Points; i <= PrimitiveTypes.Triangles; i++) {
552
- if (prims[i].getNumberOfValues() > 0) {
553
- {
554
- var usage = publicAPI.getUsage(rep, i);
555
- var primHelper = model.primitives[i];
556
- publicAPI.buildVertexInput(model.currentInput, prims[i], i);
557
- primHelper.setPipelineHash(publicAPI.computePipelineHash(primHelper.getVertexInput(), usage, false));
558
- primHelper.setTextureViews(model.textureViews);
559
- primHelper.setWebGPURenderer(model.WebGPURenderer);
560
- primHelper.setNumberOfInstances(1);
561
- var vbo = primHelper.getVertexInput().getBuffer('vertexBC');
562
- primHelper.setNumberOfVertices(vbo.getSizeInBytes() / vbo.getStrideInBytes());
563
- primHelper.setTopology(publicAPI.getTopologyFromUsage(usage));
564
- primHelper.build(model.renderEncoder, device);
565
- primHelper.registerToDraw();
566
- } // also handle edge visibility if turned on
567
-
568
- if (edgeVisibility && rep === Representation.SURFACE && i === PrimitiveTypes.Triangles) {
569
- var _primHelper = model.primitives[PrimitiveTypes.TriangleEdges];
570
-
571
- var _usage = publicAPI.getUsage(rep, PrimitiveTypes.TriangleEdges);
572
-
573
- publicAPI.buildVertexInput(model.currentInput, prims[PrimitiveTypes.Triangles], PrimitiveTypes.TriangleEdges);
574
-
575
- _primHelper.setPipelineHash(publicAPI.computePipelineHash(_primHelper.getVertexInput(), _usage, true));
68
+ _cellMapper.setCellArray(prims[_i - 2]);
576
69
 
577
- _primHelper.setWebGPURenderer(model.WebGPURenderer);
70
+ _cellMapper.setCurrentInput(poly);
578
71
 
579
- _primHelper.setNumberOfInstances(4);
72
+ _cellMapper.setCellOffset(model.primitives[_i - 2].getCellOffset());
580
73
 
581
- var _vbo = _primHelper.getVertexInput().getBuffer('vertexBC');
74
+ _cellMapper.setPrimitiveType(_i);
582
75
 
583
- _primHelper.setNumberOfVertices(_vbo.getSizeInBytes() / _vbo.getStrideInBytes());
76
+ _cellMapper.setRenderable(model.renderable);
584
77
 
585
- _primHelper.setTopology(publicAPI.getTopologyFromUsage(_usage));
586
-
587
- _primHelper.build(model.renderEncoder, device);
588
-
589
- _primHelper.registerToDraw();
78
+ cellMappers.push(_cellMapper);
79
+ } else {
80
+ model.primitives[_i] = null;
590
81
  }
591
82
  }
592
83
  }
593
- };
594
84
 
595
- publicAPI.setShaderReplacement = function (name, func) {
596
- for (var i = PrimitiveTypes.Start; i < PrimitiveTypes.End; i++) {
597
- var sr = model.primitives[i].getShaderReplacements();
598
- sr.set(name, func);
599
- }
600
- };
601
-
602
- publicAPI.setFragmentShaderTemplate = function (val) {
603
- model.fragmentShaderTemplate = val;
604
-
605
- for (var i = PrimitiveTypes.Start; i < PrimitiveTypes.End; i++) {
606
- model.primitives[i].setFragmentShaderTemplate(val);
607
- }
608
- };
609
-
610
- publicAPI.setVertexShaderTemplate = function (val) {
611
- model.fragmentShaderTemplate = val;
612
-
613
- for (var i = PrimitiveTypes.Start; i < PrimitiveTypes.End; i++) {
614
- model.primitives[i].setVertexShaderTemplate(val);
615
- }
85
+ publicAPI.prepareNodes();
86
+ publicAPI.addMissingChildren(cellMappers);
87
+ publicAPI.removeUnusedNodes();
616
88
  };
617
89
  } // ----------------------------------------------------------------------------
618
90
  // Object factory
@@ -620,14 +92,7 @@ function vtkWebGPUPolyDataMapper(publicAPI, model) {
620
92
 
621
93
 
622
94
  var DEFAULT_VALUES = {
623
- colorTexture: null,
624
- renderEncoder: null,
625
- textures: null,
626
- textureViews: null,
627
- primitives: null,
628
- tmpMat4: null,
629
- fragmentShaderTemplate: null,
630
- vertexShaderTemplate: null
95
+ primitives: null
631
96
  }; // ----------------------------------------------------------------------------
632
97
 
633
98
  function extend(publicAPI, model) {
@@ -635,48 +100,9 @@ function extend(publicAPI, model) {
635
100
  Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance
636
101
 
637
102
  vtkViewNode.extend(publicAPI, model, initialValues);
638
- model.tmpMat3 = mat3.identity(new Float64Array(9));
639
- model.tmpMat4 = mat4.identity(new Float64Array(16));
640
- model.fragmentShaderTemplate = model.fragmentShaderTemplate || vtkWebGPUPolyDataFS;
641
- model.vertexShaderTemplate = model.vertexShaderTemplate || vtkWebGPUPolyDataVS;
642
- model.UBO = vtkWebGPUUniformBuffer.newInstance({
643
- label: 'mapperUBO'
644
- });
645
- model.UBO.addEntry('BCWCMatrix', 'mat4x4<f32>');
646
- model.UBO.addEntry('BCSCMatrix', 'mat4x4<f32>');
647
- model.UBO.addEntry('MCWCNormals', 'mat4x4<f32>');
648
- model.UBO.addEntry('AmbientColor', 'vec4<f32>');
649
- model.UBO.addEntry('DiffuseColor', 'vec4<f32>');
650
- model.UBO.addEntry('EdgeColor', 'vec4<f32>');
651
- model.UBO.addEntry('AmbientIntensity', 'f32');
652
- model.UBO.addEntry('DiffuseIntensity', 'f32');
653
- model.UBO.addEntry('SpecularColor', 'vec4<f32>');
654
- model.UBO.addEntry('SpecularIntensity', 'f32');
655
- model.UBO.addEntry('Opacity', 'f32');
656
- model.UBO.addEntry('SpecularPower', 'f32');
657
- model.UBO.addEntry('PropID', 'u32'); // Build VTK API
658
-
659
- get(publicAPI, model, ['fragmentShaderTemplate', 'vertexShaderTemplate', 'UBO']);
660
- setGet(publicAPI, model, ['renderEncoder']);
661
- model.textures = [];
662
- model.textureViews = [];
663
103
  model.primitives = []; // Object methods
664
104
 
665
105
  vtkWebGPUPolyDataMapper(publicAPI, model);
666
-
667
- for (var i = PrimitiveTypes.Start; i < PrimitiveTypes.End; i++) {
668
- model.primitives[i] = vtkWebGPUMapperHelper.newInstance();
669
- model.primitives[i].setUBO(model.UBO);
670
- model.primitives[i].setVertexShaderTemplate(publicAPI.getVertexShaderTemplate());
671
- model.primitives[i].setFragmentShaderTemplate(publicAPI.getFragmentShaderTemplate());
672
- }
673
-
674
- publicAPI.setShaderReplacement('replaceShaderPosition', publicAPI.replaceShaderPosition);
675
- publicAPI.setShaderReplacement('replaceShaderLight', publicAPI.replaceShaderLight);
676
- publicAPI.setShaderReplacement('replaceShaderTCoord', publicAPI.replaceShaderTCoord);
677
- publicAPI.setShaderReplacement('replaceShaderNormal', publicAPI.replaceShaderNormal);
678
- publicAPI.setShaderReplacement('replaceShaderSelect', publicAPI.replaceShaderSelect);
679
- publicAPI.setShaderReplacement('replaceShaderColor', publicAPI.replaceShaderColor);
680
106
  } // ----------------------------------------------------------------------------
681
107
 
682
108
  var newInstance = newInstance$1(extend, 'vtkWebGPUPolyDataMapper'); // ----------------------------------------------------------------------------