Skip to content

Commit d6cf81e

Browse files
bruyeretfinetjul
authored andcommitted
refactor: Factorize computation of the hash for volumes
1 parent 61a1d47 commit d6cf81e

File tree

5 files changed

+30
-7
lines changed

5 files changed

+30
-7
lines changed

Sources/Rendering/OpenGL/ImageCPRMapper/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ import vtkReplacementShaderMapper from 'vtk.js/Sources/Rendering/OpenGL/Replacem
1212
import vtkShaderProgram from 'vtk.js/Sources/Rendering/OpenGL/ShaderProgram';
1313
import vtkViewNode from 'vtk.js/Sources/Rendering/SceneGraph/ViewNode';
1414

15-
import { getTransferFunctionHash } from 'vtk.js/Sources/Rendering/OpenGL/RenderWindow/resourceSharingHelper';
15+
import {
16+
getTransferFunctionHash,
17+
getImageDataHash,
18+
} from 'vtk.js/Sources/Rendering/OpenGL/RenderWindow/resourceSharingHelper';
1619

1720
import vtkPolyDataVS from 'vtk.js/Sources/Rendering/OpenGL/glsl/vtkPolyDataVS.glsl';
1821
import vtkPolyDataFS from 'vtk.js/Sources/Rendering/OpenGL/glsl/vtkPolyDataFS.glsl';
@@ -192,7 +195,7 @@ function vtkOpenGLImageCPRMapper(publicAPI, model) {
192195
}
193196
const cachedScalarsEntry =
194197
model._openGLRenderWindow.getGraphicsResourceForObject(scalars);
195-
const volumeTextureHash = `${image.getMTime()}A${scalars.getMTime()}`;
198+
const volumeTextureHash = getImageDataHash(image, scalars);
196199
const reBuildTex =
197200
!cachedScalarsEntry?.oglObject?.getHandle() ||
198201
cachedScalarsEntry?.hash !== volumeTextureHash;

Sources/Rendering/OpenGL/ImageResliceMapper/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ import vtkShaderProgram from 'vtk.js/Sources/Rendering/OpenGL/ShaderProgram';
1616
import vtkTransform from 'vtk.js/Sources/Common/Transform/Transform';
1717
import vtkViewNode from 'vtk.js/Sources/Rendering/SceneGraph/ViewNode';
1818

19-
import { getTransferFunctionHash } from 'vtk.js/Sources/Rendering/OpenGL/RenderWindow/resourceSharingHelper';
19+
import {
20+
getTransferFunctionHash,
21+
getImageDataHash,
22+
} from 'vtk.js/Sources/Rendering/OpenGL/RenderWindow/resourceSharingHelper';
2023

2124
import vtkImageResliceMapperVS from 'vtk.js/Sources/Rendering/OpenGL/glsl/vtkImageResliceMapperVS.glsl';
2225
import vtkImageResliceMapperFS from 'vtk.js/Sources/Rendering/OpenGL/glsl/vtkImageResliceMapperFS.glsl';
@@ -225,7 +228,7 @@ function vtkOpenGLImageResliceMapper(publicAPI, model) {
225228
}
226229

227230
const numComp = scalars.getNumberOfComponents();
228-
let toString = `${image.getMTime()}A${scalars.getMTime()}`;
231+
let toString = getImageDataHash(image, scalars);
229232

230233
const tex = model._openGLRenderWindow.getGraphicsResourceForObject(scalars);
231234
const reBuildTex = !tex?.oglObject?.getHandle() || tex?.hash !== toString;

Sources/Rendering/OpenGL/RenderWindow/resourceSharingHelper.d.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import vtkImageData from '../../../Common/DataModel/ImageData';
2+
import vtkDataArray from '../../../Common/Core/DataArray';
13
import { vtkObject } from "../../../interfaces";
24

35
/**
@@ -9,6 +11,14 @@ import { vtkObject } from "../../../interfaces";
911
*/
1012
export function getTransferFunctionHash(transferFunction: vtkObject | undefined, useIndependentComponents: boolean, numberOfComponents: number): string;
1113

14+
/**
15+
* Compute and return a hash than can be used for caching resources
16+
*
17+
* @param image The image data that contains the scalars
18+
* @param scalars The scalars used for rendering
19+
*/
20+
export function getImageDataHash(image: vtkImageData, scalars: vtkDataArray): string;
21+
1222
declare const defaultExport: {
1323
getTransferFunctionHash: typeof getTransferFunctionHash;
1424
};

Sources/Rendering/OpenGL/RenderWindow/resourceSharingHelper.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,8 @@ export function getTransferFunctionHash(
1010
: '0';
1111
}
1212

13-
export default { getTransferFunctionHash };
13+
export function getImageDataHash(image, scalars) {
14+
return `${image.getMTime()}A${scalars.getMTime()}`;
15+
}
16+
17+
export default { getTransferFunctionHash, getImageDataHash };

Sources/Rendering/OpenGL/VolumeMapper/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ import {
2424
} from 'vtk.js/Sources/Rendering/Core/VolumeProperty/Constants';
2525
import { BlendMode } from 'vtk.js/Sources/Rendering/Core/VolumeMapper/Constants';
2626

27-
import { getTransferFunctionHash } from 'vtk.js/Sources/Rendering/OpenGL/RenderWindow/resourceSharingHelper';
27+
import {
28+
getTransferFunctionHash,
29+
getImageDataHash,
30+
} from 'vtk.js/Sources/Rendering/OpenGL/RenderWindow/resourceSharingHelper';
2831

2932
import vtkVolumeVS from 'vtk.js/Sources/Rendering/OpenGL/glsl/vtkVolumeVS.glsl';
3033
import vtkVolumeFS from 'vtk.js/Sources/Rendering/OpenGL/glsl/vtkVolumeFS.glsl';
@@ -1704,7 +1707,7 @@ function vtkOpenGLVolumeMapper(publicAPI, model) {
17041707

17051708
const tex = model._openGLRenderWindow.getGraphicsResourceForObject(scalars);
17061709
// rebuild the scalarTexture if the data has changed
1707-
toString = `${image.getMTime()}A${scalars.getMTime()}`;
1710+
toString = getImageDataHash(image, scalars);
17081711
const reBuildTex = !tex?.oglObject?.getHandle() || tex?.hash !== toString;
17091712
if (reBuildTex) {
17101713
model.scalarTexture = vtkOpenGLTexture.newInstance();

0 commit comments

Comments
 (0)