Skip to content

Commit c5f08f7

Browse files
committed
perf(viewnode): speedup getViewNodeFor
Provide the previously found view node to avoid a full search each time a prepass of buildPass is done issue #3351
1 parent 062ab25 commit c5f08f7

File tree

11 files changed

+29
-12
lines changed

11 files changed

+29
-12
lines changed

Sources/Rendering/OpenGL/HardwareSelector/index.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,8 @@ function vtkOpenGLHardwareSelector(publicAPI, model) {
341341
//----------------------------------------------------------------------------
342342
publicAPI.beginSelection = () => {
343343
model._openGLRenderer = model._openGLRenderWindow.getViewNodeFor(
344-
model._renderer
344+
model._renderer,
345+
model._openGLRenderer
345346
);
346347
model.maxAttributeId = 0;
347348

@@ -459,7 +460,8 @@ function vtkOpenGLHardwareSelector(publicAPI, model) {
459460
}
460461

461462
model._openGLRenderer = model._openGLRenderWindow.getViewNodeFor(
462-
model._renderer
463+
model._renderer,
464+
model._openGLRenderer
463465
);
464466

465467
// todo revisit making selection part of core

Sources/Rendering/OpenGL/ImageCPRMapper/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ function vtkOpenGLImageCPRMapper(publicAPI, model) {
6161
}
6262
model.context = model._openGLRenderWindow.getContext();
6363
model.openGLCamera = model._openGLRenderer.getViewNodeFor(
64-
model._openGLRenderer.getRenderable().getActiveCamera()
64+
model._openGLRenderer.getRenderable().getActiveCamera(),
65+
model.openGLCamera
6566
);
6667

6768
model.tris.setOpenGLRenderWindow(model._openGLRenderWindow);

Sources/Rendering/OpenGL/ImageMapper/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ function vtkOpenGLImageMapper(publicAPI, model) {
9191
model.tris.setOpenGLRenderWindow(model._openGLRenderWindow);
9292
const ren = model._openGLRenderer.getRenderable();
9393
model.openGLCamera = model._openGLRenderer.getViewNodeFor(
94-
ren.getActiveCamera()
94+
ren.getActiveCamera(),
95+
model.openGLCamera
9596
);
9697
// is slice set by the camera
9798
if (

Sources/Rendering/OpenGL/ImageResliceMapper/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ function vtkOpenGLImageResliceMapper(publicAPI, model) {
113113
publicAPI.getFirstAncestorOfType('vtkOpenGLRenderer');
114114
const ren = model._openGLRenderer.getRenderable();
115115
model._openGLCamera = model._openGLRenderer.getViewNodeFor(
116-
ren.getActiveCamera()
116+
ren.getActiveCamera(),
117+
model.openGLCamera
117118
);
118119
const oldOglRenderWindow = model._openGLRenderWindow;
119120
model._openGLRenderWindow = model._openGLRenderer.getLastAncestorOfType(

Sources/Rendering/OpenGL/PolyDataMapper/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ function vtkOpenGLPolyDataMapper(publicAPI, model) {
6060
'vtkOpenGLRenderWindow'
6161
);
6262
model.openGLCamera = model._openGLRenderer.getViewNodeFor(
63-
model._openGLRenderer.getRenderable().getActiveCamera()
63+
model._openGLRenderer.getRenderable().getActiveCamera(),
64+
model.openGLCamera
6465
);
6566
}
6667
};

Sources/Rendering/OpenGL/PolyDataMapper2D/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ function vtkOpenGLPolyDataMapper2D(publicAPI, model) {
4141
'vtkOpenGLRenderWindow'
4242
);
4343
model.openGLCamera = model._openGLRenderer.getViewNodeFor(
44-
model._openGLRenderer.getRenderable().getActiveCamera()
44+
model._openGLRenderer.getRenderable().getActiveCamera(),
45+
model.openGLCamera
4546
);
4647
}
4748
};

Sources/Rendering/OpenGL/Skybox/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ function vtkOpenGLSkybox(publicAPI, model) {
3131
model.openGLTexture.setOpenGLRenderWindow(model._openGLRenderWindow);
3232
const ren = model._openGLRenderer.getRenderable();
3333
model.openGLCamera = model._openGLRenderer.getViewNodeFor(
34-
ren.getActiveCamera()
34+
ren.getActiveCamera(),
35+
model.openGLCamera
3536
);
3637
}
3738
};

Sources/Rendering/OpenGL/VolumeMapper/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,8 @@ function vtkOpenGLVolumeMapper(publicAPI, model) {
162162
publicAPI.getFirstAncestorOfType('vtkOpenGLRenderer');
163163
const ren = model._openGLRenderer.getRenderable();
164164
model.openGLCamera = model._openGLRenderer.getViewNodeFor(
165-
ren.getActiveCamera()
165+
ren.getActiveCamera(),
166+
model.openGLCamera
166167
);
167168
publicAPI.renderPiece(ren, actor);
168169
}

Sources/Rendering/SceneGraph/ViewNode/index.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,9 @@ export interface vtkViewNode extends vtkObject {
100100
* Returns the view node that corresponding to the provided object
101101
* Will return NULL if a match is not found in self or descendents
102102
* @param dataObject
103+
* @param [hint] the previously found node (for optimization)
103104
*/
104-
getViewNodeFor(dataObject: any): any;
105+
getViewNodeFor(dataObject: any, hint?: any): any;
105106

106107
/**
107108
*

Sources/Rendering/SceneGraph/ViewNode/index.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@ function vtkViewNode(publicAPI, model) {
4545
}
4646
};
4747

48-
publicAPI.getViewNodeFor = (dataObject) => {
48+
publicAPI.getViewNodeFor = (dataObject, hint = null) => {
49+
if (hint && hint.renderable === dataObject) {
50+
return hint;
51+
}
52+
4953
if (model.renderable === dataObject) {
5054
return publicAPI;
5155
}

0 commit comments

Comments
 (0)