@cornerstonejs/core 5.4.10 → 5.4.12

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.
@@ -1,4 +1,3 @@
1
- import { RenderBackend } from '../../../enums/index.js';
2
1
  import type { RenderBackendValue } from '../../../enums/index.js';
3
2
  import type { PlanarViewState, PlanarEffectiveRenderMode, PlanarOrientation, PlanarRegisteredDataSet } from './PlanarViewportTypes.js';
4
3
  export interface SelectedPlanarRenderPath {
@@ -9,7 +8,7 @@ export interface SelectedPlanarRenderPath {
9
8
  export interface PlanarRenderPathDecisionOptions {
10
9
  orientation?: PlanarOrientation;
11
10
  useSliceRendering?: boolean;
12
- renderBackend?: RenderBackend | RenderBackendValue;
11
+ renderBackend?: RenderBackendValue;
13
12
  }
14
13
  export declare class PlanarRenderPathDecisionService {
15
14
  select(dataSet: PlanarRegisteredDataSet, options?: PlanarRenderPathDecisionOptions): SelectedPlanarRenderPath;
@@ -1,9 +1,9 @@
1
1
  import { vec3 } from 'gl-matrix';
2
2
  import cache from '../../../cache/cache.js';
3
- import { OrientationAxis, RenderBackend } from '../../../enums/index.js';
3
+ import { OrientationAxis } from '../../../enums/index.js';
4
4
  import { getEffectiveRenderBackend } from '../../../init.js';
5
5
  import * as metaData from '../../../metaData.js';
6
- import { ActorRenderMode } from '../../../types/index.js';
6
+ import { getRenderModeForBackend } from '../../helpers/renderBackendRegistry.js';
7
7
  import { isValidVolume } from '../../../utilities/isValidVolume.js';
8
8
  import { getOrientationFromScanAxisNormal } from '../../helpers/getCameraVectors.js';
9
9
  export class PlanarRenderPathDecisionService {
@@ -55,14 +55,10 @@ export class PlanarRenderPathDecisionService {
55
55
  return true;
56
56
  }
57
57
  selectImageRenderMode(options) {
58
- return this.resolveBackend(options) === RenderBackend.CPU
59
- ? ActorRenderMode.CPU_IMAGE
60
- : ActorRenderMode.VTK_IMAGE;
58
+ return getRenderModeForBackend(this.resolveBackend(options), 'image');
61
59
  }
62
60
  selectVolumeRenderMode(options) {
63
- return this.resolveBackend(options) === RenderBackend.CPU
64
- ? ActorRenderMode.CPU_VOLUME
65
- : ActorRenderMode.VTK_VOLUME_SLICE;
61
+ return getRenderModeForBackend(this.resolveBackend(options), 'volume');
66
62
  }
67
63
  resolveBackend(options) {
68
64
  return getEffectiveRenderBackend(options.renderBackend);
@@ -1,3 +1,4 @@
1
+ import { createRegisteredPlanarRenderPaths } from '../../helpers/renderBackendRegistry.js';
1
2
  import { DefaultRenderPathResolver } from '../DefaultRenderPathResolver.js';
2
3
  import { CpuImageSlicePath } from './CpuImageSliceRenderPath.js';
3
4
  import { CpuVolumeSlicePath } from './CpuVolumeSliceRenderPath.js';
@@ -9,6 +10,7 @@ export function createDefaultPlanarRenderPaths() {
9
10
  new CpuVolumeSlicePath(),
10
11
  new VtkImageMapperPath(),
11
12
  new VtkVolumeSlicePath(),
13
+ ...createRegisteredPlanarRenderPaths(),
12
14
  ];
13
15
  }
14
16
  export function createPlanarRenderPathResolver(paths = createDefaultPlanarRenderPaths()) {
@@ -1,5 +1,6 @@
1
- import { Events, OrientationAxis, RenderBackend, ViewportStatus, ViewportType, VOILUTFunctionType, } from '../../../enums/index.js';
1
+ import { Events, OrientationAxis, ViewportStatus, ViewportType, VOILUTFunctionType, } from '../../../enums/index.js';
2
2
  import { ActorRenderMode } from '../../../types/index.js';
3
+ import { getRenderBackendForRenderMode, getRenderSurfaceForRenderMode, isImageRenderMode, isVolumeRenderMode, } from '../../helpers/renderBackendRegistry.js';
3
4
  import { isImageActor } from '../../../utilities/actorCheck.js';
4
5
  import cache from '../../../cache/cache.js';
5
6
  import { deepClone } from '../../../utilities/deepClone.js';
@@ -272,17 +273,18 @@ class PlanarViewport extends GenericViewport {
272
273
  }
273
274
  getCanvas() {
274
275
  const rendering = this.getCurrentPlanarRendering();
275
- if (rendering?.renderMode === ActorRenderMode.CPU_IMAGE ||
276
- rendering?.renderMode === ActorRenderMode.CPU_VOLUME) {
276
+ if (getRenderSurfaceForRenderMode(rendering?.renderMode) === 'cpu') {
277
277
  return this.renderContext.cpu.canvas;
278
278
  }
279
279
  return this.renderContext.vtk.canvas;
280
280
  }
281
281
  async addImages(stackInputs) {
282
282
  const rendering = this.getCurrentPlanarRendering();
283
- if (rendering?.renderMode !== ActorRenderMode.VTK_IMAGE &&
284
- rendering?.renderMode !== ActorRenderMode.VTK_VOLUME_SLICE &&
285
- rendering?.renderMode !== ActorRenderMode.CPU_IMAGE) {
283
+ const renderMode = rendering?.renderMode;
284
+ const supportsImageOverlays = isImageRenderMode(renderMode) ||
285
+ (isVolumeRenderMode(renderMode) &&
286
+ getRenderSurfaceForRenderMode(renderMode) !== 'cpu');
287
+ if (!supportsImageOverlays) {
286
288
  return;
287
289
  }
288
290
  for (const stackInput of stackInputs) {
@@ -338,12 +340,10 @@ class PlanarViewport extends GenericViewport {
338
340
  }
339
341
  const renderMode = binding.rendering.renderMode;
340
342
  if (renderMode === ActorRenderMode.VTK_VOLUME ||
341
- renderMode === ActorRenderMode.VTK_VOLUME_SLICE ||
342
- renderMode === ActorRenderMode.CPU_VOLUME) {
343
+ isVolumeRenderMode(renderMode)) {
343
344
  return 'volume';
344
345
  }
345
- if (renderMode === ActorRenderMode.VTK_IMAGE ||
346
- renderMode === ActorRenderMode.CPU_IMAGE) {
346
+ if (isImageRenderMode(renderMode)) {
347
347
  return 'stack';
348
348
  }
349
349
  return this.getVolumeId() ? 'volume' : 'stack';
@@ -624,8 +624,7 @@ class PlanarViewport extends GenericViewport {
624
624
  const clampedImageIdIndex = Math.min(Math.max(0, imageIdIndex), this.getMaxImageIdIndex());
625
625
  const resolvedImageId = imageIds[clampedImageIdIndex] || imageIds[imageIds.length - 1];
626
626
  const rendering = this.getCurrentPlanarRendering();
627
- if (rendering?.renderMode === ActorRenderMode.CPU_VOLUME ||
628
- rendering?.renderMode === ActorRenderMode.VTK_VOLUME_SLICE) {
627
+ if (isVolumeRenderMode(rendering?.renderMode)) {
629
628
  const sliceWorldPoint = this.getVolumeSliceWorldPointForImageIdIndex(clampedImageIdIndex);
630
629
  if (sliceWorldPoint) {
631
630
  this.setViewState({
@@ -878,8 +877,7 @@ class PlanarViewport extends GenericViewport {
878
877
  }
879
878
  }
880
879
  setRenderModeVisibility(renderMode, cpuCanvas, vtkCanvas) {
881
- const useCPUCanvas = renderMode === ActorRenderMode.CPU_IMAGE ||
882
- renderMode === ActorRenderMode.CPU_VOLUME;
880
+ const useCPUCanvas = getRenderSurfaceForRenderMode(renderMode) === 'cpu';
883
881
  const viewportElement = this.element.querySelector('.viewport-element');
884
882
  cpuCanvas.style.display = useCPUCanvas ? '' : 'none';
885
883
  cpuCanvas.style.pointerEvents = useCPUCanvas ? 'auto' : 'none';
@@ -1042,20 +1040,10 @@ class PlanarViewport extends GenericViewport {
1042
1040
  if (role === 'source') {
1043
1041
  return undefined;
1044
1042
  }
1045
- switch (this.getCurrentPlanarRendering()?.renderMode) {
1046
- case ActorRenderMode.CPU_IMAGE:
1047
- case ActorRenderMode.CPU_VOLUME:
1048
- return RenderBackend.CPU;
1049
- case ActorRenderMode.VTK_IMAGE:
1050
- case ActorRenderMode.VTK_VOLUME_SLICE:
1051
- return RenderBackend.GPU;
1052
- default:
1053
- return undefined;
1054
- }
1043
+ return getRenderBackendForRenderMode(this.getCurrentPlanarRendering()?.renderMode);
1055
1044
  }
1056
1045
  applyLoadedPlanarViewState(resolvedOrientation, planarData, selectedPath) {
1057
- const isVolumePath = selectedPath.renderMode === ActorRenderMode.CPU_VOLUME ||
1058
- selectedPath.renderMode === ActorRenderMode.VTK_VOLUME_SLICE;
1046
+ const isVolumePath = isVolumeRenderMode(selectedPath.renderMode);
1059
1047
  const orientation = normalizePlanarOrientation(resolvedOrientation, selectedPath.acquisitionOrientation);
1060
1048
  const slice = isVolumePath
1061
1049
  ? this.createInitialVolumeSliceState(planarData, selectedPath.renderMode, orientation)
@@ -1075,7 +1063,7 @@ class PlanarViewport extends GenericViewport {
1075
1063
  return;
1076
1064
  }
1077
1065
  const { height, width } = this.getCurrentCanvasDimensions();
1078
- const createSliceBasis = renderMode === ActorRenderMode.CPU_VOLUME
1066
+ const createSliceBasis = getRenderSurfaceForRenderMode(renderMode) === 'cpu'
1079
1067
  ? createPlanarCpuVolumeSliceBasis
1080
1068
  : createPlanarVolumeSliceBasis;
1081
1069
  const initialImageIdIndex = orientation === OrientationAxis.ACQUISITION
@@ -1,6 +1,6 @@
1
1
  import type vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer';
2
2
  import type vtkImageData from '@kitware/vtk.js/Common/DataModel/ImageData';
3
- import type { BlendModes, InterpolationType, OrientationAxis, RenderBackend, RenderBackendValue, VOILUTFunctionType } from '../../../enums/index.js';
3
+ import type { BlendModes, InterpolationType, OrientationAxis, RenderBackendValue, VOILUTFunctionType } from '../../../enums/index.js';
4
4
  import type { ActorEntry, ActorRenderMode, ColormapPublic, IImage, IImageVolume, OrientationVectors, Point2, Point3, VOIRange } from '../../../types/index.js';
5
5
  import type { ViewportInput } from '../../../types/IViewport.js';
6
6
  import type ViewportInputOptions from '../../../types/ViewportInputOptions.js';
@@ -11,7 +11,7 @@ import type { CameraScaleMode, ViewAnchor } from '../ViewportCameraTypes.js';
11
11
  import type DisplayArea from '../../../types/displayArea.js';
12
12
  import type { PlanarScaleInput } from './planarCameraScale.js';
13
13
  export type PlanarRenderMode = ActorRenderMode.CPU_IMAGE | 'webgl2d' | ActorRenderMode.VTK_IMAGE | ActorRenderMode.VTK_VOLUME_SLICE;
14
- export type PlanarEffectiveRenderMode = ActorRenderMode.CPU_IMAGE | 'webgl2d' | ActorRenderMode.VTK_IMAGE | ActorRenderMode.VTK_VOLUME_SLICE | ActorRenderMode.CPU_VOLUME;
14
+ export type PlanarEffectiveRenderMode = ActorRenderMode.CPU_IMAGE | 'webgl2d' | ActorRenderMode.VTK_IMAGE | ActorRenderMode.VTK_VOLUME_SLICE | ActorRenderMode.CPU_VOLUME | (string & {});
15
15
  export type PlanarOrientation = OrientationAxis.ACQUISITION | OrientationAxis.AXIAL | OrientationAxis.CORONAL | OrientationAxis.SAGITTAL | OrientationVectors;
16
16
  export interface PlanarRegisteredDataSet {
17
17
  imageIds: string[];
@@ -24,7 +24,7 @@ export interface PlanarRegisteredDataSet {
24
24
  }
25
25
  export interface PlanarSetDataOptions {
26
26
  orientation?: PlanarOrientation;
27
- renderBackend?: RenderBackend | RenderBackendValue;
27
+ renderBackend?: RenderBackendValue;
28
28
  role?: BindingRole;
29
29
  }
30
30
  export interface PlanarDataLoadOptions {
@@ -0,0 +1,38 @@
1
+ import type { EffectiveRenderBackend, RenderBackend as RenderBackendWire, RenderBackendConstants } from '../../types/RenderBackendRegistry.js';
2
+ import type { RenderPathDefinition } from '../GenericViewport/ViewportArchitectureTypes.js';
3
+ export type RenderSurface = 'vtk' | 'cpu';
4
+ export type RenderBackendDataKind = 'image' | 'volume';
5
+ export interface RenderBackendRenderMode {
6
+ id: string;
7
+ createDefinition?: () => RenderPathDefinition;
8
+ }
9
+ export interface RenderBackendRenderModes {
10
+ image: RenderBackendRenderMode;
11
+ volume?: RenderBackendRenderMode;
12
+ }
13
+ export interface RenderBackendDefinition {
14
+ backend: string;
15
+ renderModes: RenderBackendRenderModes;
16
+ surface?: RenderSurface;
17
+ }
18
+ type RegisterRenderBackendNamedOptions<Name extends keyof RenderBackendConstants> = RenderBackendDefinition & {
19
+ name: Name;
20
+ backend: RenderBackendConstants[Name];
21
+ };
22
+ type RegisterRenderBackendUnnamedOptions = RenderBackendDefinition & {
23
+ backend: RenderBackendWire | string;
24
+ name?: never;
25
+ };
26
+ export type RegisterRenderBackendOptions = RegisterRenderBackendNamedOptions<keyof RenderBackendConstants> | RegisterRenderBackendUnnamedOptions;
27
+ export declare function registerRenderBackend<Name extends keyof RenderBackendConstants>(options: RegisterRenderBackendNamedOptions<Name>): void;
28
+ export declare function registerRenderBackend(options: RegisterRenderBackendUnnamedOptions): void;
29
+ export declare function isRegisteredRenderBackend(backend: string): boolean;
30
+ export declare function getRenderBackendDefinition(backend: string): Readonly<RenderBackendDefinition> | undefined;
31
+ export declare function getRenderModeForBackend(backend: string, kind: RenderBackendDataKind): string;
32
+ export declare function getRenderBackendForRenderMode(renderMode: string | undefined): EffectiveRenderBackend | undefined;
33
+ export declare function isVolumeRenderMode(renderMode: string | undefined): boolean;
34
+ export declare function isImageRenderMode(renderMode: string | undefined): boolean;
35
+ export declare function getRenderSurfaceForRenderMode(renderMode: string | undefined): RenderSurface;
36
+ export declare function createRegisteredPlanarRenderPaths(): RenderPathDefinition[];
37
+ export declare function __resetRenderBackendRegistry(): void;
38
+ export {};
@@ -0,0 +1,133 @@
1
+ import RenderBackends, { registerRenderBackendsConstant, } from '../../enums/RenderBackends.js';
2
+ import { ActorRenderMode } from '../../types/IActor.js';
3
+ const backendDefinitions = new Map();
4
+ const renderModeIndex = new Map();
5
+ const registeredConstantNames = [];
6
+ let hasRegisteredCoreRenderBackends = false;
7
+ function registerCoreRenderBackends() {
8
+ if (hasRegisteredCoreRenderBackends) {
9
+ return;
10
+ }
11
+ hasRegisteredCoreRenderBackends = true;
12
+ registerRenderBackend({
13
+ backend: RenderBackends.GPU,
14
+ renderModes: {
15
+ image: { id: ActorRenderMode.VTK_IMAGE },
16
+ volume: { id: ActorRenderMode.VTK_VOLUME_SLICE },
17
+ },
18
+ surface: 'vtk',
19
+ });
20
+ registerRenderBackend({
21
+ backend: RenderBackends.CPU,
22
+ renderModes: {
23
+ image: { id: ActorRenderMode.CPU_IMAGE },
24
+ volume: { id: ActorRenderMode.CPU_VOLUME },
25
+ },
26
+ surface: 'cpu',
27
+ });
28
+ }
29
+ export function registerRenderBackend({ backend, name, renderModes, surface = 'vtk', }) {
30
+ registerCoreRenderBackends();
31
+ if (backend === RenderBackends.Auto) {
32
+ throw new Error(`Render backend id "${RenderBackends.Auto}" is reserved for the automatic backend resolution`);
33
+ }
34
+ if (backendDefinitions.has(backend)) {
35
+ throw new Error(`Render backend "${backend}" is already registered`);
36
+ }
37
+ if (!renderModes?.image?.id) {
38
+ throw new Error(`Render backend "${backend}" must declare renderModes.image`);
39
+ }
40
+ if (renderModes.volume && renderModes.volume.id === renderModes.image.id) {
41
+ throw new Error(`Render backend "${backend}" must use distinct render modes for image and volume`);
42
+ }
43
+ const modeEntries = [
44
+ [renderModes.image.id, 'image'],
45
+ ];
46
+ if (renderModes.volume) {
47
+ modeEntries.push([renderModes.volume.id, 'volume']);
48
+ }
49
+ for (const [renderMode] of modeEntries) {
50
+ const existing = renderModeIndex.get(renderMode);
51
+ if (existing && existing.backend !== backend) {
52
+ throw new Error(`Render mode "${renderMode}" is already provided by render backend "${existing.backend}"`);
53
+ }
54
+ }
55
+ if (name && Object.prototype.hasOwnProperty.call(RenderBackends, name)) {
56
+ throw new Error(`Render backend constant "${String(name)}" already exists`);
57
+ }
58
+ backendDefinitions.set(backend, {
59
+ backend,
60
+ renderModes,
61
+ surface,
62
+ });
63
+ for (const [renderMode, kind] of modeEntries) {
64
+ renderModeIndex.set(renderMode, {
65
+ backend: backend,
66
+ kind,
67
+ surface,
68
+ });
69
+ }
70
+ if (name) {
71
+ registerRenderBackendsConstant(name, backend);
72
+ registeredConstantNames.push(name);
73
+ }
74
+ }
75
+ export function isRegisteredRenderBackend(backend) {
76
+ registerCoreRenderBackends();
77
+ return backendDefinitions.has(backend);
78
+ }
79
+ export function getRenderBackendDefinition(backend) {
80
+ registerCoreRenderBackends();
81
+ return backendDefinitions.get(backend);
82
+ }
83
+ export function getRenderModeForBackend(backend, kind) {
84
+ const definition = getRenderBackendDefinition(backend);
85
+ if (!definition) {
86
+ throw new Error(`Unknown render backend "${backend}". Register it with registerRenderBackend() first.`);
87
+ }
88
+ const renderMode = definition.renderModes[kind];
89
+ if (!renderMode) {
90
+ throw new Error(`Render backend "${backend}" does not support ${kind}-backed rendering`);
91
+ }
92
+ return renderMode.id;
93
+ }
94
+ export function getRenderBackendForRenderMode(renderMode) {
95
+ registerCoreRenderBackends();
96
+ return renderMode ? renderModeIndex.get(renderMode)?.backend : undefined;
97
+ }
98
+ export function isVolumeRenderMode(renderMode) {
99
+ registerCoreRenderBackends();
100
+ return renderMode
101
+ ? renderModeIndex.get(renderMode)?.kind === 'volume'
102
+ : false;
103
+ }
104
+ export function isImageRenderMode(renderMode) {
105
+ registerCoreRenderBackends();
106
+ return renderMode ? renderModeIndex.get(renderMode)?.kind === 'image' : false;
107
+ }
108
+ export function getRenderSurfaceForRenderMode(renderMode) {
109
+ registerCoreRenderBackends();
110
+ return (renderMode && renderModeIndex.get(renderMode)?.surface) || 'vtk';
111
+ }
112
+ export function createRegisteredPlanarRenderPaths() {
113
+ registerCoreRenderBackends();
114
+ const paths = [];
115
+ for (const definition of backendDefinitions.values()) {
116
+ const { image, volume } = definition.renderModes;
117
+ for (const mode of [image, volume]) {
118
+ if (mode?.createDefinition) {
119
+ paths.push(mode.createDefinition());
120
+ }
121
+ }
122
+ }
123
+ return paths;
124
+ }
125
+ export function __resetRenderBackendRegistry() {
126
+ backendDefinitions.clear();
127
+ renderModeIndex.clear();
128
+ hasRegisteredCoreRenderBackends = false;
129
+ for (const name of registeredConstantNames) {
130
+ delete RenderBackends[name];
131
+ }
132
+ registeredConstantNames.length = 0;
133
+ }
@@ -46,7 +46,7 @@ declare const renderingEngineExportsV2: {
46
46
  createPlanarRenderPathResolver: typeof createPlanarRenderPathResolver;
47
47
  DefaultPlanarDataProvider: typeof DefaultPlanarDataProvider;
48
48
  planarProjection: {
49
- adapter: import("./GenericViewport/index.js").ViewportProjectionAdapter<import("./GenericViewport/index.js").PlanarViewState, import("../index.js").PlanarViewPresentation, import("./GenericViewport/index.js").PlanarProjectionSnapshot>;
49
+ adapter: import("./GenericViewport/index.js").ViewportProjectionAdapter<import("./GenericViewport/index.js").PlanarViewState, import("./index.js").PlanarViewPresentation, import("./GenericViewport/index.js").PlanarProjectionSnapshot>;
50
50
  getSnapshot: typeof import("./GenericViewport/Planar/planarProjectionSnapshot.js").getPlanarProjectionSnapshot;
51
51
  getZoom: typeof import("./GenericViewport/Planar/planarProjectionSnapshot.js").getPlanarProjectionZoom;
52
52
  getScale: typeof import("./GenericViewport/Planar/planarProjectionSnapshot.js").getPlanarProjectionScale;
@@ -0,0 +1,6 @@
1
+ import type { RenderBackendConstants, RenderBackend as RenderBackendWire } from '../types/RenderBackendRegistry.js';
2
+ export type RenderBackendsMap = RenderBackendConstants;
3
+ export type RenderBackendValue = RenderBackendWire;
4
+ declare const RenderBackends: RenderBackendsMap;
5
+ export declare function registerRenderBackendsConstant<Name extends keyof RenderBackendConstants>(name: Name, backend: RenderBackendConstants[Name]): void;
6
+ export default RenderBackends;
@@ -0,0 +1,14 @@
1
+ const builtInRenderBackends = {
2
+ Auto: 'auto',
3
+ GPU: 'gpu',
4
+ CPU: 'cpu',
5
+ };
6
+ const RenderBackends = builtInRenderBackends;
7
+ export function registerRenderBackendsConstant(name, backend) {
8
+ if (Object.prototype.hasOwnProperty.call(RenderBackends, name)) {
9
+ throw new Error(`Render backend constant "${String(name)}" already exists`);
10
+ }
11
+ RenderBackends[name] =
12
+ backend;
13
+ }
14
+ export default RenderBackends;
@@ -18,5 +18,5 @@ import MetadataModules from './MetadataModules.js';
18
18
  import { GenerateImageType } from './GenerateImageType.js';
19
19
  import VoxelManagerEnum from './VoxelManagerEnum.js';
20
20
  import RenderingEngineModeEnum from './RenderingEngineModeEnum.js';
21
- import RenderBackend, { type RenderBackendValue } from './RenderBackend.js';
22
- export { Events, BlendModes, CalibrationTypes, InterpolationType, RequestType, ViewportType, ViewportTypes, type ViewportTypesMap, OrientationAxis, GeometryType, ContourType, MeshType, VOILUTFunctionType, DynamicOperatorType, ViewportStatus, VideoEnums, MetadataModules, ImageQualityStatus, VoxelManagerEnum, GenerateImageType, RenderingEngineModeEnum, RenderBackend, type RenderBackendValue, };
21
+ import RenderBackends, { type RenderBackendValue, type RenderBackendsMap } from './RenderBackends.js';
22
+ export { Events, BlendModes, CalibrationTypes, InterpolationType, RequestType, ViewportType, ViewportTypes, type ViewportTypesMap, OrientationAxis, GeometryType, ContourType, MeshType, VOILUTFunctionType, DynamicOperatorType, ViewportStatus, VideoEnums, MetadataModules, ImageQualityStatus, VoxelManagerEnum, GenerateImageType, RenderingEngineModeEnum, RenderBackends, type RenderBackendValue, type RenderBackendsMap, };
@@ -18,5 +18,5 @@ import MetadataModules from './MetadataModules.js';
18
18
  import { GenerateImageType } from './GenerateImageType.js';
19
19
  import VoxelManagerEnum from './VoxelManagerEnum.js';
20
20
  import RenderingEngineModeEnum from './RenderingEngineModeEnum.js';
21
- import RenderBackend, {} from './RenderBackend.js';
22
- export { Events, BlendModes, CalibrationTypes, InterpolationType, RequestType, ViewportType, ViewportTypes, OrientationAxis, GeometryType, ContourType, MeshType, VOILUTFunctionType, DynamicOperatorType, ViewportStatus, VideoEnums, MetadataModules, ImageQualityStatus, VoxelManagerEnum, GenerateImageType, RenderingEngineModeEnum, RenderBackend, };
21
+ import RenderBackends, {} from './RenderBackends.js';
22
+ export { Events, BlendModes, CalibrationTypes, InterpolationType, RequestType, ViewportType, ViewportTypes, OrientationAxis, GeometryType, ContourType, MeshType, VOILUTFunctionType, DynamicOperatorType, ViewportStatus, VideoEnums, MetadataModules, ImageQualityStatus, VoxelManagerEnum, GenerateImageType, RenderingEngineModeEnum, RenderBackends, };
@@ -1,6 +1,6 @@
1
1
  import * as Enums from './enums/index.js';
2
2
  import * as CONSTANTS from './constants/index.js';
3
- import { Events } from './enums/index.js';
3
+ import { Events, RenderBackends } from './enums/index.js';
4
4
  import RenderingEngine, { BaseRenderingEngine, TiledRenderingEngine, ContextPoolRenderingEngine } from './RenderingEngine/index.js';
5
5
  import createVolumeActor from './RenderingEngine/helpers/createVolumeActor.js';
6
6
  import createVolumeMapper, { convertMapperToNotSharedMapper } from './RenderingEngine/helpers/createVolumeMapper.js';
@@ -54,8 +54,12 @@ import { cornerstoneStreamingDynamicImageVolumeLoader } from './loaders/cornerst
54
54
  import { cornerstoneMeshLoader } from './loaders/cornerstoneMeshLoader.js';
55
55
  import { setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, getProjectionScaleMatrix } from './RenderingEngine/helpers/index.js';
56
56
  import { registerViewportType, isRegisteredViewportType } from './RenderingEngine/helpers/viewportTypeToViewportClass.js';
57
+ import { registerRenderBackend, isRegisteredRenderBackend } from './RenderingEngine/helpers/renderBackendRegistry.js';
57
58
  export type { ViewportType, ViewportTypeConstants, ViewportTypeRegistry, } from './types/ViewportTypeRegistry.js';
58
59
  export type { ViewportTypesMap } from './enums/ViewportTypes.js';
60
+ export type { EffectiveRenderBackend, RenderBackendConstants, RenderBackendRegistry, } from './types/RenderBackendRegistry.js';
61
+ export type { RenderBackendsMap, RenderBackendValue, } from './enums/RenderBackends.js';
62
+ export type { RegisterRenderBackendOptions, RenderBackendDefinition, RenderBackendRenderMode, RenderBackendRenderModes, RenderSurface, } from './RenderingEngine/helpers/renderBackendRegistry.js';
59
63
  export * from './loaders/decimatedVolumeLoader.js';
60
64
  declare const renderingEngineExportsV2: {
61
65
  GenericViewport: typeof GenericViewport;
@@ -66,7 +70,7 @@ declare const renderingEngineExportsV2: {
66
70
  createECGRenderPathResolver: typeof createECGRenderPathResolver;
67
71
  DefaultECGDataProvider: typeof DefaultECGDataProvider;
68
72
  ecgProjection: {
69
- adapter: import("./index.js").ViewportProjectionAdapter<import("./index.js").ECGViewState, Types.ViewPresentation, import("./index.js").ECGProjectionSnapshot>;
73
+ adapter: import("./RenderingEngine/index.js").ViewportProjectionAdapter<import("./RenderingEngine/index.js").ECGViewState, Types.ViewPresentation, import("./RenderingEngine/index.js").ECGProjectionSnapshot>;
70
74
  getSnapshot: typeof import("./RenderingEngine/GenericViewport/ECG/ecgProjectionSnapshot.js").getECGProjectionSnapshot;
71
75
  };
72
76
  VideoGenericViewport: typeof VideoGenericViewport;
@@ -74,7 +78,7 @@ declare const renderingEngineExportsV2: {
74
78
  createVideoRenderPathResolver: typeof createVideoRenderPathResolver;
75
79
  DefaultVideoDataProvider: typeof DefaultVideoDataProvider;
76
80
  videoProjection: {
77
- adapter: import("./index.js").ViewportProjectionAdapter<import("./index.js").VideoViewState, Types.ViewPresentation, import("./index.js").VideoProjectionSnapshot>;
81
+ adapter: import("./RenderingEngine/index.js").ViewportProjectionAdapter<import("./RenderingEngine/index.js").VideoViewState, Types.ViewPresentation, import("./RenderingEngine/index.js").VideoProjectionSnapshot>;
78
82
  getSnapshot: typeof import("./RenderingEngine/GenericViewport/Video/videoProjectionSnapshot.js").getVideoProjectionSnapshot;
79
83
  };
80
84
  PlanarViewport: typeof PlanarViewport;
@@ -82,7 +86,7 @@ declare const renderingEngineExportsV2: {
82
86
  createPlanarRenderPathResolver: typeof createPlanarRenderPathResolver;
83
87
  DefaultPlanarDataProvider: typeof DefaultPlanarDataProvider;
84
88
  planarProjection: {
85
- adapter: import("./index.js").ViewportProjectionAdapter<import("./index.js").PlanarViewState, import("./index.js").PlanarViewPresentation, import("./index.js").PlanarProjectionSnapshot>;
89
+ adapter: import("./RenderingEngine/index.js").ViewportProjectionAdapter<import("./RenderingEngine/index.js").PlanarViewState, import("./RenderingEngine/index.js").PlanarViewPresentation, import("./RenderingEngine/index.js").PlanarProjectionSnapshot>;
86
90
  getSnapshot: typeof import("./RenderingEngine/GenericViewport/Planar/planarProjectionSnapshot.js").getPlanarProjectionSnapshot;
87
91
  getZoom: typeof import("./RenderingEngine/GenericViewport/Planar/planarProjectionSnapshot.js").getPlanarProjectionZoom;
88
92
  getScale: typeof import("./RenderingEngine/GenericViewport/Planar/planarProjectionSnapshot.js").getPlanarProjectionScale;
@@ -98,7 +102,7 @@ declare const renderingEngineExportsV2: {
98
102
  createVolume3DRenderPathResolver: typeof createVolume3DRenderPathResolver;
99
103
  DefaultVolume3DDataProvider: typeof DefaultVolume3DDataProvider;
100
104
  volume3DProjection: {
101
- adapter: import("./index.js").ViewportProjectionAdapter<import("./index.js").Volume3DCamera, import("./index.js").Volume3DProjectionPresentation, import("./index.js").Volume3DProjectionSnapshot>;
105
+ adapter: import("./RenderingEngine/index.js").ViewportProjectionAdapter<import("./RenderingEngine/index.js").Volume3DCamera, import("./RenderingEngine/index.js").Volume3DProjectionPresentation, import("./RenderingEngine/index.js").Volume3DProjectionSnapshot>;
102
106
  getSnapshot: typeof import("./RenderingEngine/GenericViewport/Volume3D/volume3DProjectionSnapshot.js").getVolume3DProjectionSnapshot;
103
107
  };
104
108
  WSIGenericViewport: typeof WSIGenericViewport;
@@ -106,10 +110,10 @@ declare const renderingEngineExportsV2: {
106
110
  createWSIRenderPathResolver: typeof createWSIRenderPathResolver;
107
111
  DefaultWSIDataProvider: typeof DefaultWSIDataProvider;
108
112
  wsiProjection: {
109
- adapter: import("./index.js").ViewportProjectionAdapter<import("./index.js").WSIViewState, Types.ViewPresentation, import("./index.js").WSIProjectionSnapshot>;
113
+ adapter: import("./RenderingEngine/index.js").ViewportProjectionAdapter<import("./RenderingEngine/index.js").WSIViewState, Types.ViewPresentation, import("./RenderingEngine/index.js").WSIProjectionSnapshot>;
110
114
  getSnapshot: typeof import("./RenderingEngine/GenericViewport/WSI/wsiProjectionSnapshot.js").getWSIProjectionSnapshot;
111
115
  };
112
116
  };
113
117
  declare const LegacyVolumeViewport3D: typeof VolumeViewport3D;
114
118
  export type { Types, IRetrieveConfiguration, RetrieveOptions, RetrieveStage, ImageLoadListener, IImagesLoader, };
115
- export { init, isCornerstoneInitialized, peerImport, resetInitialization, getConfiguration, setConfiguration, getWebWorkerManager, canRenderFloatTextures, Enums, CONSTANTS, Events as EVENTS, Settings, BaseVolumeViewport, VolumeViewport, LegacyVolumeViewport3D, VolumeViewport3D, GenericVolumeViewport3D, Viewport, StackViewport, VideoViewport, WSIViewport, ECGViewport, ECGGenericViewport, GenericViewport, ViewportProjectionService, viewportProjection, viewportHasCanvasWorldTransform, viewportHasFrameOfReferenceUID, viewportHasPan, viewportHasZoom, RenderingEngine, BaseRenderingEngine, TiledRenderingEngine, ContextPoolRenderingEngine, ImageVolume, Surface, getRenderingEngine, getRenderingEngines, getEnabledElement, getEnabledElementByIds, getEnabledElements, getEnabledElementByViewportId, createVolumeActor, createVolumeMapper, cache, eventTarget, triggerEvent, convertColorArrayToRgbString, imageLoader, registerImageLoader, volumeLoader, metaData, utilities, setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, DefaultRenderPathResolver, defaultRenderPathResolver, createDefaultECGRenderPaths, createECGRenderPathResolver, DefaultECGDataProvider, ecgProjection, VideoGenericViewport, createDefaultVideoRenderPaths, createVideoRenderPathResolver, DefaultVideoDataProvider, videoProjection, PlanarViewport, createDefaultPlanarRenderPaths, createPlanarRenderPathResolver, DefaultPlanarDataProvider, planarProjection, createDefaultVolume3DRenderPaths, createVolume3DRenderPathResolver, DefaultVolume3DDataProvider, volume3DProjection, WSIGenericViewport, createDefaultWSIRenderPaths, createWSIRenderPathResolver, DefaultWSIDataProvider, wsiProjection, renderingEngineExportsV2, getProjectionScaleMatrix, registerViewportType, isRegisteredViewportType, imageLoadPoolManager as requestPoolManager, imageRetrievalPoolManager, imageLoadPoolManager, getShouldUseCPURendering, setUseCPURendering, setPreferSizeOverAccuracy, resetUseCPURendering, getRenderBackend, setRenderBackend, getEffectiveRenderBackend, getRenderingCapabilities, detectRenderingCapabilities, getUseGenericViewport, geometryLoader, cornerstoneMeshLoader, ProgressiveRetrieveImages, decimatedVolumeLoader, ActorRenderMode, cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, StreamingDynamicImageVolume, StreamingImageVolume, convertMapperToNotSharedMapper, version, };
119
+ export { init, isCornerstoneInitialized, peerImport, resetInitialization, getConfiguration, setConfiguration, getWebWorkerManager, canRenderFloatTextures, Enums, CONSTANTS, Events as EVENTS, Settings, BaseVolumeViewport, VolumeViewport, LegacyVolumeViewport3D, VolumeViewport3D, GenericVolumeViewport3D, Viewport, StackViewport, VideoViewport, WSIViewport, ECGViewport, ECGGenericViewport, GenericViewport, ViewportProjectionService, viewportProjection, viewportHasCanvasWorldTransform, viewportHasFrameOfReferenceUID, viewportHasPan, viewportHasZoom, RenderingEngine, BaseRenderingEngine, TiledRenderingEngine, ContextPoolRenderingEngine, ImageVolume, Surface, getRenderingEngine, getRenderingEngines, getEnabledElement, getEnabledElementByIds, getEnabledElements, getEnabledElementByViewportId, createVolumeActor, createVolumeMapper, cache, eventTarget, triggerEvent, convertColorArrayToRgbString, imageLoader, registerImageLoader, volumeLoader, metaData, utilities, setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, DefaultRenderPathResolver, defaultRenderPathResolver, createDefaultECGRenderPaths, createECGRenderPathResolver, DefaultECGDataProvider, ecgProjection, VideoGenericViewport, createDefaultVideoRenderPaths, createVideoRenderPathResolver, DefaultVideoDataProvider, videoProjection, PlanarViewport, createDefaultPlanarRenderPaths, createPlanarRenderPathResolver, DefaultPlanarDataProvider, planarProjection, createDefaultVolume3DRenderPaths, createVolume3DRenderPathResolver, DefaultVolume3DDataProvider, volume3DProjection, WSIGenericViewport, createDefaultWSIRenderPaths, createWSIRenderPathResolver, DefaultWSIDataProvider, wsiProjection, renderingEngineExportsV2, getProjectionScaleMatrix, registerViewportType, isRegisteredViewportType, registerRenderBackend, isRegisteredRenderBackend, imageLoadPoolManager as requestPoolManager, imageRetrievalPoolManager, imageLoadPoolManager, getShouldUseCPURendering, setUseCPURendering, setPreferSizeOverAccuracy, resetUseCPURendering, RenderBackends, getRenderBackend, setRenderBackend, getEffectiveRenderBackend, getRenderingCapabilities, detectRenderingCapabilities, getUseGenericViewport, geometryLoader, cornerstoneMeshLoader, ProgressiveRetrieveImages, decimatedVolumeLoader, ActorRenderMode, cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, StreamingDynamicImageVolume, StreamingImageVolume, convertMapperToNotSharedMapper, version, };
package/dist/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as Enums from './enums/index.js';
2
2
  import * as CONSTANTS from './constants/index.js';
3
- import { Events } from './enums/index.js';
3
+ import { Events, RenderBackends } from './enums/index.js';
4
4
  import RenderingEngine, { BaseRenderingEngine, TiledRenderingEngine, ContextPoolRenderingEngine, } from './RenderingEngine/index.js';
5
5
  import createVolumeActor from './RenderingEngine/helpers/createVolumeActor.js';
6
6
  import createVolumeMapper, { convertMapperToNotSharedMapper, } from './RenderingEngine/helpers/createVolumeMapper.js';
@@ -46,6 +46,7 @@ import { cornerstoneStreamingDynamicImageVolumeLoader } from './loaders/cornerst
46
46
  import { cornerstoneMeshLoader } from './loaders/cornerstoneMeshLoader.js';
47
47
  import { setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, getProjectionScaleMatrix, } from './RenderingEngine/helpers/index.js';
48
48
  import { registerViewportType, isRegisteredViewportType, } from './RenderingEngine/helpers/viewportTypeToViewportClass.js';
49
+ import { registerRenderBackend, isRegisteredRenderBackend, } from './RenderingEngine/helpers/renderBackendRegistry.js';
49
50
  export * from './loaders/decimatedVolumeLoader.js';
50
51
  const renderingEngineExportsV2 = {
51
52
  GenericViewport,
@@ -78,4 +79,4 @@ const renderingEngineExportsV2 = {
78
79
  wsiProjection,
79
80
  };
80
81
  const LegacyVolumeViewport3D = VolumeViewport3D;
81
- export { init, isCornerstoneInitialized, peerImport, resetInitialization, getConfiguration, setConfiguration, getWebWorkerManager, canRenderFloatTextures, Enums, CONSTANTS, Events as EVENTS, Settings, BaseVolumeViewport, VolumeViewport, LegacyVolumeViewport3D, VolumeViewport3D, GenericVolumeViewport3D, Viewport, StackViewport, VideoViewport, WSIViewport, ECGViewport, ECGGenericViewport, GenericViewport, ViewportProjectionService, viewportProjection, viewportHasCanvasWorldTransform, viewportHasFrameOfReferenceUID, viewportHasPan, viewportHasZoom, RenderingEngine, BaseRenderingEngine, TiledRenderingEngine, ContextPoolRenderingEngine, ImageVolume, Surface, getRenderingEngine, getRenderingEngines, getEnabledElement, getEnabledElementByIds, getEnabledElements, getEnabledElementByViewportId, createVolumeActor, createVolumeMapper, cache, eventTarget, triggerEvent, convertColorArrayToRgbString, imageLoader, registerImageLoader, volumeLoader, metaData, utilities, setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, DefaultRenderPathResolver, defaultRenderPathResolver, createDefaultECGRenderPaths, createECGRenderPathResolver, DefaultECGDataProvider, ecgProjection, VideoGenericViewport, createDefaultVideoRenderPaths, createVideoRenderPathResolver, DefaultVideoDataProvider, videoProjection, PlanarViewport, createDefaultPlanarRenderPaths, createPlanarRenderPathResolver, DefaultPlanarDataProvider, planarProjection, createDefaultVolume3DRenderPaths, createVolume3DRenderPathResolver, DefaultVolume3DDataProvider, volume3DProjection, WSIGenericViewport, createDefaultWSIRenderPaths, createWSIRenderPathResolver, DefaultWSIDataProvider, wsiProjection, renderingEngineExportsV2, getProjectionScaleMatrix, registerViewportType, isRegisteredViewportType, imageLoadPoolManager as requestPoolManager, imageRetrievalPoolManager, imageLoadPoolManager, getShouldUseCPURendering, setUseCPURendering, setPreferSizeOverAccuracy, resetUseCPURendering, getRenderBackend, setRenderBackend, getEffectiveRenderBackend, getRenderingCapabilities, detectRenderingCapabilities, getUseGenericViewport, geometryLoader, cornerstoneMeshLoader, ProgressiveRetrieveImages, decimatedVolumeLoader, ActorRenderMode, cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, StreamingDynamicImageVolume, StreamingImageVolume, convertMapperToNotSharedMapper, version, };
82
+ export { init, isCornerstoneInitialized, peerImport, resetInitialization, getConfiguration, setConfiguration, getWebWorkerManager, canRenderFloatTextures, Enums, CONSTANTS, Events as EVENTS, Settings, BaseVolumeViewport, VolumeViewport, LegacyVolumeViewport3D, VolumeViewport3D, GenericVolumeViewport3D, Viewport, StackViewport, VideoViewport, WSIViewport, ECGViewport, ECGGenericViewport, GenericViewport, ViewportProjectionService, viewportProjection, viewportHasCanvasWorldTransform, viewportHasFrameOfReferenceUID, viewportHasPan, viewportHasZoom, RenderingEngine, BaseRenderingEngine, TiledRenderingEngine, ContextPoolRenderingEngine, ImageVolume, Surface, getRenderingEngine, getRenderingEngines, getEnabledElement, getEnabledElementByIds, getEnabledElements, getEnabledElementByViewportId, createVolumeActor, createVolumeMapper, cache, eventTarget, triggerEvent, convertColorArrayToRgbString, imageLoader, registerImageLoader, volumeLoader, metaData, utilities, setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, DefaultRenderPathResolver, defaultRenderPathResolver, createDefaultECGRenderPaths, createECGRenderPathResolver, DefaultECGDataProvider, ecgProjection, VideoGenericViewport, createDefaultVideoRenderPaths, createVideoRenderPathResolver, DefaultVideoDataProvider, videoProjection, PlanarViewport, createDefaultPlanarRenderPaths, createPlanarRenderPathResolver, DefaultPlanarDataProvider, planarProjection, createDefaultVolume3DRenderPaths, createVolume3DRenderPathResolver, DefaultVolume3DDataProvider, volume3DProjection, WSIGenericViewport, createDefaultWSIRenderPaths, createWSIRenderPathResolver, DefaultWSIDataProvider, wsiProjection, renderingEngineExportsV2, getProjectionScaleMatrix, registerViewportType, isRegisteredViewportType, registerRenderBackend, isRegisteredRenderBackend, imageLoadPoolManager as requestPoolManager, imageRetrievalPoolManager, imageLoadPoolManager, getShouldUseCPURendering, setUseCPURendering, setPreferSizeOverAccuracy, resetUseCPURendering, RenderBackends, getRenderBackend, setRenderBackend, getEffectiveRenderBackend, getRenderingCapabilities, detectRenderingCapabilities, getUseGenericViewport, geometryLoader, cornerstoneMeshLoader, ProgressiveRetrieveImages, decimatedVolumeLoader, ActorRenderMode, cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, StreamingDynamicImageVolume, StreamingImageVolume, convertMapperToNotSharedMapper, version, };
@@ -1,13 +1,13 @@
1
1
  import type { Cornerstone3DConfig } from './types/index.js';
2
2
  import CentralizedWebWorkerManager from './webWorkerManager/webWorkerManager.js';
3
- import { RenderBackend } from './enums/index.js';
4
3
  import type { RenderBackendValue } from './enums/index.js';
4
+ import type { EffectiveRenderBackend } from './types/RenderBackendRegistry.js';
5
5
  declare function init(configuration?: Cornerstone3DConfig): boolean;
6
6
  declare function getCanUseNorm16Texture(): boolean;
7
- declare function getRenderBackend(): RenderBackend;
8
- declare function resolveAutoRenderBackend(): RenderBackend.GPU | RenderBackend.CPU;
9
- declare function getEffectiveRenderBackend(override?: RenderBackend | RenderBackendValue): RenderBackend.GPU | RenderBackend.CPU;
10
- declare function setRenderBackend(backend: RenderBackend | RenderBackendValue, reason?: string): void;
7
+ declare function getRenderBackend(): RenderBackendValue;
8
+ declare function resolveAutoRenderBackend(): EffectiveRenderBackend;
9
+ declare function getEffectiveRenderBackend(override?: RenderBackendValue): EffectiveRenderBackend;
10
+ declare function setRenderBackend(backend: RenderBackendValue, reason?: string): void;
11
11
  declare function setUseCPURendering(status: boolean, updateViewports?: boolean): void;
12
12
  declare function setPreferSizeOverAccuracy(status: boolean): void;
13
13
  declare function canRenderFloatTextures(): boolean;
package/dist/esm/init.js CHANGED
@@ -5,7 +5,8 @@ import CentralizedWebWorkerManager from './webWorkerManager/webWorkerManager.js'
5
5
  import { getRenderingCapabilities } from './utilities/renderingCapabilities.js';
6
6
  import triggerEvent from './utilities/triggerEvent.js';
7
7
  import eventTarget from './eventTarget.js';
8
- import { Events, RenderBackend, RenderingEngineModeEnum } from './enums/index.js';
8
+ import { Events, RenderBackends, RenderingEngineModeEnum } from './enums/index.js';
9
+ import { isRegisteredRenderBackend } from './RenderingEngine/helpers/renderBackendRegistry.js';
9
10
  const defaultConfig = {
10
11
  isMobile: false,
11
12
  rendering: {
@@ -16,7 +17,7 @@ const defaultConfig = {
16
17
  renderingEngineMode: RenderingEngineModeEnum.ContextPool,
17
18
  webGlContextCount: 7,
18
19
  planar: {
19
- renderBackend: RenderBackend.Auto,
20
+ renderBackend: RenderBackends.Auto,
20
21
  cpuVolume: {
21
22
  useViewportSamplingForLinear: true,
22
23
  volumeModifiedThrottleMs: 5000,
@@ -87,26 +88,32 @@ function getCanUseNorm16Texture() {
87
88
  return _hasNorm16TextureSupport();
88
89
  }
89
90
  function getRenderBackend() {
90
- return (config.rendering.planar?.renderBackend ??
91
- RenderBackend.Auto);
91
+ return config.rendering.planar?.renderBackend ?? RenderBackends.Auto;
92
92
  }
93
93
  function resolveAutoRenderBackend() {
94
94
  return config.rendering.useCPURendering
95
- ? RenderBackend.CPU
96
- : RenderBackend.GPU;
95
+ ? RenderBackends.CPU
96
+ : RenderBackends.GPU;
97
97
  }
98
+ const warnedUnregisteredBackends = new Set();
98
99
  function getEffectiveRenderBackend(override) {
99
- const backend = (override ?? getRenderBackend());
100
- if (backend === RenderBackend.GPU || backend === RenderBackend.CPU) {
101
- return backend;
100
+ const backend = override ?? getRenderBackend();
101
+ if (backend !== RenderBackends.Auto) {
102
+ if (isRegisteredRenderBackend(backend)) {
103
+ return backend;
104
+ }
105
+ if (!warnedUnregisteredBackends.has(backend)) {
106
+ warnedUnregisteredBackends.add(backend);
107
+ console.warn(`[getEffectiveRenderBackend] Unregistered render backend "${backend}"; ` +
108
+ `falling back to 'auto'. Register custom backends with registerRenderBackend().`);
109
+ }
102
110
  }
103
111
  return resolveAutoRenderBackend();
104
112
  }
105
113
  function setRenderBackend(backend, reason) {
106
- if (backend !== RenderBackend.Auto &&
107
- backend !== RenderBackend.GPU &&
108
- backend !== RenderBackend.CPU) {
109
- throw new Error(`[setRenderBackend] Invalid render backend: ${String(backend)}`);
114
+ if (backend !== RenderBackends.Auto && !isRegisteredRenderBackend(backend)) {
115
+ throw new Error(`[setRenderBackend] Invalid render backend: ${String(backend)}. ` +
116
+ `Register custom backends with registerRenderBackend() before selecting them.`);
110
117
  }
111
118
  const previous = getRenderBackend();
112
119
  if (previous === backend) {
@@ -1,5 +1,5 @@
1
1
  import type { RenderingEngineModeType } from '../types/index.js';
2
- import type { RenderBackend, RenderBackendValue } from '../enums/index.js';
2
+ import type { RenderBackendValue } from '../enums/index.js';
3
3
  interface Cornerstone3DConfig {
4
4
  isMobile?: boolean;
5
5
  rendering?: {
@@ -10,7 +10,7 @@ interface Cornerstone3DConfig {
10
10
  renderingEngineMode?: RenderingEngineModeType;
11
11
  webGlContextCount?: number;
12
12
  planar?: {
13
- renderBackend?: RenderBackend | RenderBackendValue;
13
+ renderBackend?: RenderBackendValue;
14
14
  cpuVolume?: {
15
15
  useViewportSamplingForLinear?: boolean;
16
16
  volumeModifiedThrottleMs?: number;
@@ -0,0 +1,16 @@
1
+ export interface CoreRenderBackendRegistry {
2
+ auto: 'auto';
3
+ gpu: 'gpu';
4
+ cpu: 'cpu';
5
+ }
6
+ export interface CoreRenderBackendConstants {
7
+ readonly Auto: 'auto';
8
+ readonly GPU: 'gpu';
9
+ readonly CPU: 'cpu';
10
+ }
11
+ export interface RenderBackendRegistry extends CoreRenderBackendRegistry {
12
+ }
13
+ export interface RenderBackendConstants extends CoreRenderBackendConstants {
14
+ }
15
+ export type RenderBackend = RenderBackendRegistry[keyof RenderBackendRegistry];
16
+ export type EffectiveRenderBackend = Exclude<RenderBackend, 'auto'>;
File without changes
@@ -113,7 +113,8 @@ import type { VtkOffscreenMultiRenderWindow } from './VtkOffscreenMultiRenderWin
113
113
  import type { ViewportDataReference } from '../RenderingEngine/GenericViewport/index.js';
114
114
  import type { ResetCameraOptions } from './ICamera.js';
115
115
  import type { ViewportType, ViewportTypeConstants, ViewportTypeRegistry } from './ViewportTypeRegistry.js';
116
+ import type { EffectiveRenderBackend, RenderBackendConstants, RenderBackendRegistry } from './RenderBackendRegistry.js';
116
117
  export type * from './MetadataModuleTypes.js';
117
118
  export type * from './InstanceTypes.js';
118
- export type { Cornerstone3DConfig, IBaseStreamingImageVolume, ICamera, ResetCameraOptions, IStackViewport, IVideoViewport, IECGViewport, IWSIViewport, IVolumeViewport, IEnabledElement, ICache, IVolume, IViewportId, IImageVolume, ImageVolumeProps, IDynamicImageVolume, IRenderingEngine, ScalingParameters, ScalingDescriptor, PTScaling, IPointsManager, PolyDataPointConfiguration, Scaling, IStreamingImageVolume, IImage, IImageData, IImageCalibration, CPUIImageData, CPUImageData, EventTypes, ImageLoaderFn, VolumeLoaderFn, IRegisterImageLoader, IStreamingVolumeProperties, IViewport, IGenericViewport, ViewportContentMode, ViewReference, DataSetOptions as ImageSetOptions, ViewPresentation, ViewPresentationSelector, ReferenceCompatibleOptions, ViewReferenceSpecifier, RenderingEngineResizeOptions, StackViewportProperties, VolumeViewportProperties, ViewportProperties, PublicViewportInput, VolumeActor, Actor, ActorEntry, ActorMapperProxy, ImageActor, ICanvasActor, IImageLoadObject, IVolumeLoadObject, IVolumeInput, VolumeInputCallback, IStackInput, StackInputCallback, ViewportPreset, Metadata, OrientationVectors, AABB2, AABB3, Point2, Point3, PointsXYZ, Point4, Mat3, Plane, ViewportInputOptions, VideoViewportProperties, WSIViewportProperties, VOIRange, VOI, DisplayArea, FlipDirection, ICachedImage, ICachedVolume, CPUFallbackEnabledElement, CPUFallbackViewport, CPUFallbackTransform, CPUFallbackColormapData, CPUFallbackViewportDisplayedArea, CPUFallbackColormapsData, CPUFallbackColormap, TransformMatrix2D, CPUFallbackLookupTable, CPUFallbackLUT, CPUFallbackRenderingTools, CustomEventType, ActorSliceRange, ImageSliceData, IGeometry, IGeometryLoadObject, ICachedGeometry, PublicContourSetData, ContourSetData, ContourData, IContourSet, IContour, PublicSurfaceData, SurfaceData, ISurface, PublicMeshData, MeshData, IMesh, RGB, ColormapPublic, ColormapRegistration, PixelDataTypedArray, PixelDataTypedArrayString, ImagePixelModule, ImagePlaneModule, AffineMatrix, ImageLoadListener, InternalVideoCamera, VideoViewportInput, InternalECGCamera, ECGViewportInput, ECGChannel, ECGWaveformData, ECGViewportProperties, BoundsIJK, BoundsLPS, Color, ColorLUT, VolumeProps, IImageFrame, LocalVolumeOptions, IVoxelManager, IRLEVoxelMap, RLERun, ViewportInput, ImageLoadRequests, IBaseVolumeViewport, GeometryLoaderFn, ScrollOptions, JumpToSliceOptions, Memo, HistoryMemo, VoxelManager, RLEVoxelMap, RenderingEngineModeType, VtkOffscreenMultiRenderWindow, ViewportDataReference, ViewportType, ViewportTypeRegistry, ViewportTypeConstants, };
119
+ export type { Cornerstone3DConfig, IBaseStreamingImageVolume, ICamera, ResetCameraOptions, IStackViewport, IVideoViewport, IECGViewport, IWSIViewport, IVolumeViewport, IEnabledElement, ICache, IVolume, IViewportId, IImageVolume, ImageVolumeProps, IDynamicImageVolume, IRenderingEngine, ScalingParameters, ScalingDescriptor, PTScaling, IPointsManager, PolyDataPointConfiguration, Scaling, IStreamingImageVolume, IImage, IImageData, IImageCalibration, CPUIImageData, CPUImageData, EventTypes, ImageLoaderFn, VolumeLoaderFn, IRegisterImageLoader, IStreamingVolumeProperties, IViewport, IGenericViewport, ViewportContentMode, ViewReference, DataSetOptions as ImageSetOptions, ViewPresentation, ViewPresentationSelector, ReferenceCompatibleOptions, ViewReferenceSpecifier, RenderingEngineResizeOptions, StackViewportProperties, VolumeViewportProperties, ViewportProperties, PublicViewportInput, VolumeActor, Actor, ActorEntry, ActorMapperProxy, ImageActor, ICanvasActor, IImageLoadObject, IVolumeLoadObject, IVolumeInput, VolumeInputCallback, IStackInput, StackInputCallback, ViewportPreset, Metadata, OrientationVectors, AABB2, AABB3, Point2, Point3, PointsXYZ, Point4, Mat3, Plane, ViewportInputOptions, VideoViewportProperties, WSIViewportProperties, VOIRange, VOI, DisplayArea, FlipDirection, ICachedImage, ICachedVolume, CPUFallbackEnabledElement, CPUFallbackViewport, CPUFallbackTransform, CPUFallbackColormapData, CPUFallbackViewportDisplayedArea, CPUFallbackColormapsData, CPUFallbackColormap, TransformMatrix2D, CPUFallbackLookupTable, CPUFallbackLUT, CPUFallbackRenderingTools, CustomEventType, ActorSliceRange, ImageSliceData, IGeometry, IGeometryLoadObject, ICachedGeometry, PublicContourSetData, ContourSetData, ContourData, IContourSet, IContour, PublicSurfaceData, SurfaceData, ISurface, PublicMeshData, MeshData, IMesh, RGB, ColormapPublic, ColormapRegistration, PixelDataTypedArray, PixelDataTypedArrayString, ImagePixelModule, ImagePlaneModule, AffineMatrix, ImageLoadListener, InternalVideoCamera, VideoViewportInput, InternalECGCamera, ECGViewportInput, ECGChannel, ECGWaveformData, ECGViewportProperties, BoundsIJK, BoundsLPS, Color, ColorLUT, VolumeProps, IImageFrame, LocalVolumeOptions, IVoxelManager, IRLEVoxelMap, RLERun, ViewportInput, ImageLoadRequests, IBaseVolumeViewport, GeometryLoaderFn, ScrollOptions, JumpToSliceOptions, Memo, HistoryMemo, VoxelManager, RLEVoxelMap, RenderingEngineModeType, VtkOffscreenMultiRenderWindow, ViewportDataReference, ViewportType, ViewportTypeRegistry, ViewportTypeConstants, EffectiveRenderBackend, RenderBackendRegistry, RenderBackendConstants, };
119
120
  export { ActorRenderMode };
@@ -2,10 +2,13 @@ import getVolumeSliceRangeInfo from './getVolumeSliceRangeInfo.js';
2
2
  function getVolumeViewportScrollInfo(viewport, volumeId, useSlabThickness = false) {
3
3
  const { sliceRange, spacingInNormalDirection, camera } = getVolumeSliceRangeInfo(viewport, volumeId, useSlabThickness);
4
4
  const { min, max, current } = sliceRange;
5
- const numScrollSteps = Math.round((max - min) / spacingInNormalDirection);
6
- const fraction = (current - min) / (max - min);
5
+ const range = max - min;
6
+ const numScrollSteps = range === 0 ? 0 : Math.round(range / spacingInNormalDirection);
7
+ const fraction = range === 0 ? 0 : (current - min) / range;
7
8
  const floatingStepNumber = fraction * numScrollSteps;
8
- const currentStepIndex = Math.round(floatingStepNumber);
9
+ const currentStepIndex = Number.isFinite(floatingStepNumber)
10
+ ? Math.round(floatingStepNumber)
11
+ : 0;
9
12
  return {
10
13
  numScrollSteps,
11
14
  currentStepIndex,
@@ -1 +1 @@
1
- export declare const version = "5.4.10";
1
+ export declare const version = "5.4.12";
@@ -1 +1 @@
1
- export const version = '5.4.10';
1
+ export const version = '5.4.12';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cornerstonejs/core",
3
- "version": "5.4.10",
3
+ "version": "5.4.12",
4
4
  "description": "Cornerstone3D Core",
5
5
  "module": "./dist/esm/index.js",
6
6
  "types": "./dist/esm/index.d.ts",
@@ -79,24 +79,24 @@
79
79
  "clean:deep": "pnpm run clean && shx rm -rf node_modules",
80
80
  "build": "pnpm run build:esm",
81
81
  "build:all": "pnpm run build:esm",
82
- "dev": "tsc --project ./tsconfig.json --watch",
82
+ "dev": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources",
83
83
  "api-check": "api-extractor --debug run ",
84
84
  "lint": "oxlint .",
85
85
  "prepublishOnly": "pnpm run build"
86
86
  },
87
87
  "dependencies": {
88
- "@cornerstonejs/utils": "5.4.10",
88
+ "@cornerstonejs/utils": "5.4.12",
89
89
  "@kitware/vtk.js": "35.5.3",
90
90
  "comlink": "4.4.2",
91
91
  "gl-matrix": "3.4.3",
92
92
  "loglevel": "1.9.2"
93
93
  },
94
94
  "devDependencies": {
95
- "@cornerstonejs/metadata": "5.4.10"
95
+ "@cornerstonejs/metadata": "5.4.12"
96
96
  },
97
97
  "peerDependencies": {
98
- "@cornerstonejs/metadata": "5.4.10",
99
- "@cornerstonejs/utils": "5.4.10"
98
+ "@cornerstonejs/metadata": "5.4.12",
99
+ "@cornerstonejs/utils": "5.4.12"
100
100
  },
101
101
  "contributors": [
102
102
  {
@@ -109,5 +109,5 @@
109
109
  "type": "individual",
110
110
  "url": "https://ohif.org/donate"
111
111
  },
112
- "gitHead": "523becb5856f2b6bb5f58c08eb2b5c66bd0b17e1"
112
+ "gitHead": "0b67d01ebc033cc338c3612c1237b5d94025cac2"
113
113
  }
@@ -1,7 +0,0 @@
1
- declare enum RenderBackend {
2
- Auto = "auto",
3
- GPU = "gpu",
4
- CPU = "cpu"
5
- }
6
- export type RenderBackendValue = `${RenderBackend}`;
7
- export default RenderBackend;
@@ -1,7 +0,0 @@
1
- var RenderBackend;
2
- (function (RenderBackend) {
3
- RenderBackend["Auto"] = "auto";
4
- RenderBackend["GPU"] = "gpu";
5
- RenderBackend["CPU"] = "cpu";
6
- })(RenderBackend || (RenderBackend = {}));
7
- export default RenderBackend;