Skip to content

Commit 8b6cc9f

Browse files
finetjulfloryst
authored andcommitted
fix(genericrenderwindow): support WebGPU backend
Allow passing defaultViewAPI in vtkFullscreenRenderWindow newInstance. vtkFullscreenRenderWindow, vtkGenericRenderWindow and vtkViewProxy are now exposing `getApiSpecificRenderWindow()` instead of `getOpenGLRenderWindow()`. `OpenGL/vtkBufferObject` and `OpenGL/vtkHardwareSelector` still expose `getOpenGLRenderWindow()`.
1 parent aa0332d commit 8b6cc9f

File tree

15 files changed

+42
-27
lines changed

15 files changed

+42
-27
lines changed

BREAKING_CHANGES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## From 28.x to 29
2+
3+
- **getOpenGLRenderWindow**: `getOpenGLRenderWindow` has been renamed to `getApiSpecificRenderWindow` in `vtkFullScreenRenderWindow`, `vtkGenericRenderWindow` and `vtkViewProxy` to support WebGL and WebGPU backend.
14
## From 27.x to 28
25

36
- **vtkManipulator.handleEvent**: Change all `handleEvent` signatures of manipulators. Used to be `handleEvent(callData, glRenderWindow): vec3`, it is now `handleEvent(callData, glRenderWindow): { worldCoords: Nullable<vec3>, worldDirection?: mat3 }`.

Examples/Applications/SkyboxViewer/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,8 +273,8 @@ function createVisualization(container, mapReader) {
273273
}
274274

275275
if (grid) {
276-
console.log(fullScreenRenderer.getOpenGLRenderWindow().getSize());
277-
createGrid(...fullScreenRenderer.getOpenGLRenderWindow().getSize());
276+
console.log(fullScreenRenderer.getApiSpecificRenderWindow().getSize());
277+
createGrid(...fullScreenRenderer.getApiSpecificRenderWindow().getSize());
278278
}
279279
}
280280

Sources/IO/Core/ImageStream/example/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ smartConnect.onConnectionReady((connection) => {
1919
// Image
2020
imageStream.connect(session);
2121
const viewStream = imageStream.createViewStream('-1');
22-
fullScreenRenderer.getOpenGLRenderWindow().setViewStream(viewStream);
22+
fullScreenRenderer.getApiSpecificRenderWindow().setViewStream(viewStream);
2323
2424
// Configure image quality
2525
viewStream.setInteractiveQuality(75);

Sources/Proxy/Core/ProxyManager/example/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ view2DContainer.className = 'viewContainer';
6969
const view3DProxy = proxyManager.createProxy('Views', 'View3D');
7070
view3DProxy.setContainer(view3DContainer);
7171
view3DProxy
72-
.getOpenGLRenderWindow()
72+
.getApiSpecificRenderWindow()
7373
.setSize([view3DContainer.clientWidth, view3DContainer.clientHeight]);
7474

7575
// ----------------------------------------------------------------------------
@@ -79,7 +79,7 @@ view3DProxy
7979
const view2DProxy = proxyManager.createProxy('Views', 'View2D', { axis: 2 });
8080
view2DProxy.setContainer(view2DContainer);
8181
view2DProxy
82-
.getOpenGLRenderWindow()
82+
.getApiSpecificRenderWindow()
8383
.setSize([view2DContainer.clientWidth, view2DContainer.clientHeight]);
8484

8585
// ----------------------------------------------------------------------------

Sources/Proxy/Core/View2DProxy/example/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ const view2DProxy = proxyManager.createProxy('Views', 'View2D', {
6868
});
6969
view2DProxy.setContainer(mainContainer);
7070
view2DProxy
71-
.getOpenGLRenderWindow()
71+
.getApiSpecificRenderWindow()
7272
.setSize(mainContainer.clientWidth, mainContainer.clientHeight);
7373

7474
fitCameraButton.addEventListener('click', () => {

Sources/Proxy/Core/ViewProxy/index.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { vtkSubscription, vtkObject } from '../../../interfaces';
88
import vtkRenderer from '../../../Rendering/Core/Renderer';
99
import vtkRenderWindow from '../../../Rendering/Core/RenderWindow';
1010
import vtkOpenGLRenderWindow from '../../../Rendering/OpenGL/RenderWindow';
11+
import vtkWebGPURenderWindow from '../../../Rendering/WebGPU/RenderWindow';
1112
import { VtkProxy } from '../../../macros';
1213

1314
export interface vtkViewProxy extends VtkProxy {
@@ -66,7 +67,7 @@ export interface vtkViewProxy extends VtkProxy {
6667
getInteractor(): vtkRenderWindowInteractor;
6768
getInteractorStyle2D(): vtkInteractorStyle;
6869
getInteractorStyle3D(): vtkInteractorStyle;
69-
getOpenGLRenderWindow(): vtkOpenGLRenderWindow;
70+
getApiSpecificRenderWindow(): vtkOpenGLRenderWindow|vtkWebGPURenderWindow;
7071
getOrientationAxesType(): string;
7172
getPresetToOrientationAxes(): any;
7273
getRenderer(): vtkRenderer;

Sources/Proxy/Representations/ResliceRepresentationProxy/example/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ const view2DProxy = proxyManager.createProxy('Views', 'View2D', {
7373
});
7474
view2DProxy.setContainer(mainContainer);
7575
view2DProxy
76-
.getOpenGLRenderWindow()
76+
.getApiSpecificRenderWindow()
7777
.setSize(mainContainer.clientWidth, mainContainer.clientHeight);
7878

7979
fitCameraButton.addEventListener('click', () => {

Sources/Rendering/Core/RenderWindow/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ export interface vtkRenderWindow extends vtkObject {
148148
* Switch the rendering backend between WebGL and WebGPU.
149149
* By default, the WebGL backend is used. To switch, to WebGPU call
150150
* `renderWindow.setDefaultViewAPI('WebGPU')` before calling `render`.
151+
* Must be called before `newAPISpecificView()` is called.
151152
* @param defaultViewAPI (default: 'WebGL')
152153
*/
153154
setDefaultViewAPI(defaultViewAPI: DEFAULT_VIEW_API): boolean;

Sources/Rendering/Misc/FullScreenRenderWindow/index.d.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export interface IFullScreenRenderWindowInitialValues {
1717
containerStyle?: object;
1818
controlPanelStyle?: object;
1919
controllerVisibility?: boolean;
20+
defaultViewAPI?: boolean;
2021
listenWindowResize?: boolean;
2122
resizeCallback?: any;
2223
}
@@ -42,7 +43,9 @@ export interface vtkFullScreenRenderWindow extends vtkObject {
4243
delete(): void;
4344

4445
/**
45-
*
46+
* Returns vtkWebGPURenderWindow if ?viewAPI='WebGPU' is in URL, or if
47+
* vtkFullScreenRenderWindow has been created with "defaultViewAPI: 'WebGPU",
48+
* otherwise vtkOpenGLRenderWindow is returned.
4649
*/
4750
getApiSpecificRenderWindow(): any; // vtkOpenGLRenderWindow || vtkWebGPURenderWindow
4851

Sources/Rendering/Misc/FullScreenRenderWindow/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ function vtkFullScreenRenderWindow(publicAPI, model) {
8080

8181
// apiSpecificRenderWindow
8282
model.apiSpecificRenderWindow = model.renderWindow.newAPISpecificView(
83-
userParams.viewAPI
83+
userParams.viewAPI ?? model.defaultViewAPI
8484
);
8585
model.apiSpecificRenderWindow.setContainer(model.container);
8686
model.renderWindow.addView(model.apiSpecificRenderWindow);
@@ -192,6 +192,7 @@ const DEFAULT_VALUES = {
192192
background: [0.32, 0.34, 0.43],
193193
containerStyle: null,
194194
controlPanelStyle: null,
195+
// defaultViewAPI: undefined,
195196
listenWindowResize: true,
196197
resizeCallback: null,
197198
controllerVisibility: true,

0 commit comments

Comments
 (0)