@vitessce/spatial-accelerated 3.8.0
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.
- package/LICENSE +21 -0
- package/dist/index.js +52925 -0
- package/dist-tsc/SpatialWrapper.d.ts +2 -0
- package/dist-tsc/SpatialWrapper.d.ts.map +1 -0
- package/dist-tsc/SpatialWrapper.js +45 -0
- package/dist-tsc/VolumeDataManager.d.ts +170 -0
- package/dist-tsc/VolumeDataManager.d.ts.map +1 -0
- package/dist-tsc/VolumeDataManager.js +1273 -0
- package/dist-tsc/VolumeDataManager.test.d.ts +2 -0
- package/dist-tsc/VolumeDataManager.test.d.ts.map +1 -0
- package/dist-tsc/VolumeDataManager.test.js +164 -0
- package/dist-tsc/VolumeRenderManager.d.ts +265 -0
- package/dist-tsc/VolumeRenderManager.d.ts.map +1 -0
- package/dist-tsc/VolumeRenderManager.js +396 -0
- package/dist-tsc/VolumeShader.d.ts +262 -0
- package/dist-tsc/VolumeShader.d.ts.map +1 -0
- package/dist-tsc/VolumeShader.js +73 -0
- package/dist-tsc/VolumeView.d.ts +2 -0
- package/dist-tsc/VolumeView.d.ts.map +1 -0
- package/dist-tsc/VolumeView.js +521 -0
- package/dist-tsc/index.d.ts +2 -0
- package/dist-tsc/index.d.ts.map +1 -0
- package/dist-tsc/index.js +1 -0
- package/dist-tsc/shaders/GaussianFragmentShader.d.ts +2 -0
- package/dist-tsc/shaders/GaussianFragmentShader.d.ts.map +1 -0
- package/dist-tsc/shaders/GaussianFragmentShader.js +242 -0
- package/dist-tsc/shaders/GaussianVertexShader.d.ts +2 -0
- package/dist-tsc/shaders/GaussianVertexShader.d.ts.map +1 -0
- package/dist-tsc/shaders/GaussianVertexShader.js +51 -0
- package/dist-tsc/shaders/VolumeFragmentShader.d.ts +2 -0
- package/dist-tsc/shaders/VolumeFragmentShader.d.ts.map +1 -0
- package/dist-tsc/shaders/VolumeFragmentShader.js +1817 -0
- package/dist-tsc/shaders/VolumeVertexShader.d.ts +2 -0
- package/dist-tsc/shaders/VolumeVertexShader.d.ts.map +1 -0
- package/dist-tsc/shaders/VolumeVertexShader.js +110 -0
- package/package.json +63 -0
- package/src/SpatialWrapper.js +60 -0
- package/src/VolumeDataManager.js +1515 -0
- package/src/VolumeDataManager.test.js +180 -0
- package/src/VolumeRenderManager.js +589 -0
- package/src/VolumeShader.js +74 -0
- package/src/VolumeView.js +651 -0
- package/src/index.js +1 -0
- package/src/shaders/GaussianFragmentShader.js +243 -0
- package/src/shaders/GaussianVertexShader.js +52 -0
- package/src/shaders/VolumeFragmentShader.js +1818 -0
- package/src/shaders/VolumeVertexShader.js +111 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpatialWrapper.d.ts","sourceRoot":"","sources":["../src/SpatialWrapper.js"],"names":[],"mappings":"AAOA,wDAoDC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
// Note: need to be careful about versions of RTF, Three, React, and React DOM in package.json
|
|
4
|
+
// to avoid multiple copies of RTF, since the Canvas depends on a React Context.
|
|
5
|
+
// Otherwise you may see errors such as "useThree can only be used inside the Canvas component!".
|
|
6
|
+
import { Canvas } from '@react-three/fiber';
|
|
7
|
+
import { VolumeView } from './VolumeView.js';
|
|
8
|
+
export function SpatialWrapper(props) {
|
|
9
|
+
// const [renderingStats, setRenderingStats] = useState({ fps: 0 });
|
|
10
|
+
// const [zarrStoreInfo, setZarrStoreInfo] = useState(null);
|
|
11
|
+
// const [deviceLimits, setDeviceLimits] = useState(null);
|
|
12
|
+
// const volumeViewRef = useRef(null);
|
|
13
|
+
// Handle initialization completion from VolumeView
|
|
14
|
+
/*
|
|
15
|
+
const handleInitComplete = (initData) => {
|
|
16
|
+
if (initData.zarrStoreInfo) {
|
|
17
|
+
setZarrStoreInfo(initData.zarrStoreInfo);
|
|
18
|
+
}
|
|
19
|
+
if (initData.deviceLimits) {
|
|
20
|
+
setDeviceLimits(initData.deviceLimits);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
*/
|
|
24
|
+
return (_jsx(Canvas, { frameloop: "always", style: {
|
|
25
|
+
position: 'absolute',
|
|
26
|
+
top: 0,
|
|
27
|
+
left: 0,
|
|
28
|
+
width: '100%',
|
|
29
|
+
height: '100%',
|
|
30
|
+
padding: 0,
|
|
31
|
+
margin: 0,
|
|
32
|
+
// backgroundColor: 'white',
|
|
33
|
+
}, camera: {
|
|
34
|
+
fov: 50,
|
|
35
|
+
up: [0, 1, 0],
|
|
36
|
+
position: [0, 0, 4],
|
|
37
|
+
near: 0.01,
|
|
38
|
+
far: 15,
|
|
39
|
+
}, gl: {
|
|
40
|
+
antialias: true,
|
|
41
|
+
logarithmicDepthBuffer: false,
|
|
42
|
+
preserveDrawingBuffer: false,
|
|
43
|
+
autoClear: false,
|
|
44
|
+
}, children: _jsx(VolumeView, { ...props }) }));
|
|
45
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
export function _resolutionStatsToShapes(multiResolutionStats: any): any;
|
|
2
|
+
export function _resolutionStatsToBrickLayout(multiResolutionStats: any): any;
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param {[number, number, number][]} zarrStoreBrickLayout
|
|
6
|
+
* @param {number} channelsZarrMappingsLength
|
|
7
|
+
*/
|
|
8
|
+
export function _initMRMCPT(zarrStoreBrickLayout: [number, number, number][], channelsZarrMappingsLength: number): {
|
|
9
|
+
PT: {
|
|
10
|
+
channelOffsets: number[][];
|
|
11
|
+
anchors: never[];
|
|
12
|
+
offsets: never[];
|
|
13
|
+
xExtent: number;
|
|
14
|
+
yExtent: number;
|
|
15
|
+
zExtent: number;
|
|
16
|
+
z0Extent: number;
|
|
17
|
+
zTotal: number;
|
|
18
|
+
};
|
|
19
|
+
ptTHREE: Data3DTexture;
|
|
20
|
+
bcTHREE: Data3DTexture;
|
|
21
|
+
};
|
|
22
|
+
export function _packPT(min: any, max: any, bcX: any, bcY: any, bcZ: any): number;
|
|
23
|
+
export function _ptToZarr(ptx: any, pty: any, ptz: any, ptInfo: any): {
|
|
24
|
+
channel: number;
|
|
25
|
+
resolution: number;
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
z: number;
|
|
29
|
+
};
|
|
30
|
+
export function _requestBufferToRequestObjects(buffer: any, k: any): {
|
|
31
|
+
requests: {
|
|
32
|
+
x: number;
|
|
33
|
+
y: number;
|
|
34
|
+
z: number;
|
|
35
|
+
}[];
|
|
36
|
+
origRequestCount: number;
|
|
37
|
+
};
|
|
38
|
+
export class VolumeDataManager {
|
|
39
|
+
constructor(glParam: any);
|
|
40
|
+
gl: any;
|
|
41
|
+
renderer: any;
|
|
42
|
+
deviceLimits: {
|
|
43
|
+
maxTextureSize: any;
|
|
44
|
+
max3DTextureSize: any;
|
|
45
|
+
maxRenderbufferSize: any;
|
|
46
|
+
maxUniformBufferBindings: any;
|
|
47
|
+
};
|
|
48
|
+
zarrStore: {
|
|
49
|
+
resolutions: null;
|
|
50
|
+
chunkSize: never[];
|
|
51
|
+
shapes: never[];
|
|
52
|
+
arrays: never[];
|
|
53
|
+
dtype: string;
|
|
54
|
+
physicalSizeTotal: never[];
|
|
55
|
+
physicalSizeVoxel: never[];
|
|
56
|
+
brickLayout: never[];
|
|
57
|
+
channelCount: number;
|
|
58
|
+
scales: never[];
|
|
59
|
+
lowestDataRes: number;
|
|
60
|
+
};
|
|
61
|
+
ptTHREE: Data3DTexture | null;
|
|
62
|
+
bcTHREE: Data3DTexture | null;
|
|
63
|
+
channels: {
|
|
64
|
+
maxChannels: number;
|
|
65
|
+
zarrMappings: never[];
|
|
66
|
+
colorMappings: never[];
|
|
67
|
+
downsampleMin: never[];
|
|
68
|
+
downsampleMax: never[];
|
|
69
|
+
};
|
|
70
|
+
PT: {
|
|
71
|
+
channelOffsets: number[][];
|
|
72
|
+
anchors: never[];
|
|
73
|
+
offsets: never[];
|
|
74
|
+
xExtent: number;
|
|
75
|
+
yExtent: number;
|
|
76
|
+
zExtent: number;
|
|
77
|
+
z0Extent: number;
|
|
78
|
+
zTotal: number;
|
|
79
|
+
};
|
|
80
|
+
bricksEverLoaded: Set<any>;
|
|
81
|
+
isBusy: boolean;
|
|
82
|
+
BCTimeStamps: any[];
|
|
83
|
+
BCMinMax: any[];
|
|
84
|
+
BCFull: boolean;
|
|
85
|
+
BCUnusedIndex: number;
|
|
86
|
+
bc2pt: any[];
|
|
87
|
+
LRUStack: any[];
|
|
88
|
+
triggerUsage: boolean;
|
|
89
|
+
triggerRequest: boolean;
|
|
90
|
+
timeStamp: number;
|
|
91
|
+
k: number;
|
|
92
|
+
noNewRequests: boolean;
|
|
93
|
+
needsBailout: boolean;
|
|
94
|
+
initStatus: string;
|
|
95
|
+
initError: any;
|
|
96
|
+
initImages(images: any, imageLayerScopes: any): void;
|
|
97
|
+
images: any;
|
|
98
|
+
imageLayerScopes: any;
|
|
99
|
+
/**
|
|
100
|
+
* Initialize the VolumeDataManager with Zarr store details and device limits
|
|
101
|
+
* This should be called ONCE at website initialization
|
|
102
|
+
* TODO(mark): merge this with the constructor?
|
|
103
|
+
* @returns {Promise<Object>} Object with Zarr store details and device limits
|
|
104
|
+
*/
|
|
105
|
+
init(config: any): Promise<Object>;
|
|
106
|
+
ngffMetadata: any;
|
|
107
|
+
/**
|
|
108
|
+
* Initialize the BrickCache and PageTable
|
|
109
|
+
* MRMCPT: multi-resolution multi-channel page table
|
|
110
|
+
*
|
|
111
|
+
* Depends on:
|
|
112
|
+
* - zarrStore.brickLayout
|
|
113
|
+
* - zarrMappings.length (zarrMappings: the zarr channel index for every one of the up to 7 channels)
|
|
114
|
+
* -
|
|
115
|
+
*/
|
|
116
|
+
initMRMCPT(): void;
|
|
117
|
+
initTexture(): Promise<void>;
|
|
118
|
+
updateChannels(channelProps: any): void;
|
|
119
|
+
/**
|
|
120
|
+
* Try to load a resolution level
|
|
121
|
+
* @param {number} resolutionIndex - The resolution level to load
|
|
122
|
+
* @param {Array} arrays - Array to store the loaded arrays
|
|
123
|
+
* @returns {Promise} Promise resolving when the resolution is loaded or rejected
|
|
124
|
+
*/
|
|
125
|
+
/**
|
|
126
|
+
* Get physical dimensions
|
|
127
|
+
* @returns {Array} Physical dimensions [X, Y, Z]
|
|
128
|
+
*/
|
|
129
|
+
getPhysicalDimensionsXYZ(): any[];
|
|
130
|
+
/**
|
|
131
|
+
* Get the maximum resolution
|
|
132
|
+
* @returns {number} Maximum resolution
|
|
133
|
+
*/
|
|
134
|
+
getMaxResolutionXYZ(): number;
|
|
135
|
+
getOriginalScaleXYZ(): never[];
|
|
136
|
+
getNormalizedScaleXYZ(): number[];
|
|
137
|
+
getBoxDimensionsXYZ(): number[];
|
|
138
|
+
/**
|
|
139
|
+
* Load a specific Zarr chunk based on [t,c,z,y,x] coordinates
|
|
140
|
+
* @param {number} t - Time point (default 0)
|
|
141
|
+
* @param {number} c - Channel (default 0)
|
|
142
|
+
* @param {number} z - Z coordinate
|
|
143
|
+
* @param {number} y - Y coordinate
|
|
144
|
+
* @param {number} x - X coordinate
|
|
145
|
+
* @param {number} resolution - Resolution level
|
|
146
|
+
* @returns {Promise<Uint8Array>} 32x32x32 chunk data
|
|
147
|
+
*/
|
|
148
|
+
loadZarrChunk(t: number | undefined, c: number | undefined, z: number, y: number, x: number, resolution: number): Promise<Uint8Array>;
|
|
149
|
+
processRequestData(buffer: any): Promise<void>;
|
|
150
|
+
processUsageData(buffer: any): Promise<void>;
|
|
151
|
+
_evictBrick(bcIndex: any): void;
|
|
152
|
+
_purgeChannel(ptChannelIndex: any): void;
|
|
153
|
+
_updatePTEntry(ptX: any, ptY: any, ptZ: any, ptVal: any): void;
|
|
154
|
+
/**
|
|
155
|
+
*
|
|
156
|
+
* @param {number} n The number of slots to allocate
|
|
157
|
+
* @returns {{ bcIndex, x, y, z }[]} Array of brick cache coordinates for the allocated slots.
|
|
158
|
+
*/
|
|
159
|
+
_allocateBCSlots(n: number): {
|
|
160
|
+
bcIndex: any;
|
|
161
|
+
x: any;
|
|
162
|
+
y: any;
|
|
163
|
+
z: any;
|
|
164
|
+
}[];
|
|
165
|
+
_uploadBrick(ptCoord: any, bcSlot: any): Promise<void>;
|
|
166
|
+
handleBrickRequests(ptRequests: any): Promise<void>;
|
|
167
|
+
_buildLRU(): void;
|
|
168
|
+
}
|
|
169
|
+
import { Data3DTexture } from 'three';
|
|
170
|
+
//# sourceMappingURL=VolumeDataManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VolumeDataManager.d.ts","sourceRoot":"","sources":["../src/VolumeDataManager.js"],"names":[],"mappings":"AA8DA,yEAaC;AACD,8EAeC;AAED;;;;GAIG;AACH,kDAHW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,8BAC1B,MAAM;;;;;;;;;;;;;EAyHhB;AAMD,kFAaC;AAqBD;;;;;;EA2DC;AAED;;;;;;;EA0BC;AAID;IACE,0BAyJC;IA5IG,QAAyB;IAa3B,cAAwB;IA8BxB;;;;;MAKC;IAED;;;;;;;;;;;;MAcC;IAED,8BAAmB;IACnB,8BAAmB;IAEnB;;;;;;MAMC;IAED;;;;;;;;;MAiBC;IAQD,2BAAiC;IAYjC,gBAAmB;IAGnB,oBAAuD;IACvD,gBAAwD;IACxD,gBAAmB;IACnB,sBAAsB;IAGtB,aAAmD;IAGnD,gBAAkB;IAElB,sBAAwB;IACxB,wBAA2B;IAC3B,kBAAkB;IAClB,UAAW;IACX,uBAA0B;IAE1B,sBAAyB;IAGzB,mBAAyC;IACzC,eAAqB;IAIvB,qDAIC;IAFC,YAAoB;IACpB,sBAAwC;IAG1C;;;;;OAKG;IACH,mBAFa,OAAO,CAAC,MAAM,CAAC,CA8S3B;IAjQG,kBAAmD;IAmQvD;;;;;;;;OAQG;IACH,mBAqBC;IASD,6BAKC;IAED,wCA6GC;IAED;;;;;OAKG;IAqBH;;;OAGG;IACH,kCAQC;IAED;;;OAGG;IACH,uBAFa,MAAM,CAUlB;IAED,+BAQC;IAED,kCASC;IAED,gCASC;IAED;;;;;;;;;OASG;IACH,iBARW,MAAM,iBACN,MAAM,iBACN,MAAM,KACN,MAAM,KACN,MAAM,cACN,MAAM,GACJ,OAAO,CAAC,UAAU,CAAC,CAiC/B;IAED,+CAmBC;IAGD,6CAmDC;IAGD,gCAcC;IAED,yCA6CC;IAGD,+DAeC;IAKD;;;;OAIG;IACH,oBAHW,MAAM,GACJ;QAAE,OAAO,MAAC;QAAC,CAAC,MAAC;QAAC,CAAC,MAAC;QAAC,CAAC,MAAA;KAAE,EAAE,CAyClC;IAKD,uDA0IC;IAKD,oDAyCC;IAKD,kBAWC;CACF;8BA79CM,OAAO"}
|