Skip to content

Commit d67e2a7

Browse files
committed
fix(core): pass through defaultGLOptions instead of just canvas for NgtGLOptions
1 parent 7d3f0f6 commit d67e2a7

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

apps/examples/src/app/misc/webgpu-renderer/webgpu-renderer.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ import { SceneGraph } from './scene';
1616
})
1717
export default class WebGPURenderer {
1818
protected frameloop = signal<NgtFrameloop>('never');
19-
protected glFactory: NgtGLOptions = (canvas) => {
19+
protected glFactory: NgtGLOptions = (defaultOptions) => {
2020
const renderer = new THREE.WebGPURenderer({
21-
canvas: canvas as HTMLCanvasElement,
21+
canvas: defaultOptions.canvas as HTMLCanvasElement,
22+
powerPreference: 'high-performance',
2223
antialias: true,
2324
forceWebGL: false,
2425
});

libs/core/src/lib/types.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,12 @@ export interface NgtRendererLike {
4343
export type NgtCanvasElement = HTMLCanvasElement | OffscreenCanvas;
4444
export type NgtGlobalRenderCallback = (timeStamp: number) => void;
4545

46+
export type NgtGLDefaultOptions = Omit<THREE.WebGLRendererParameters, 'canvas'> & {
47+
canvas: NgtCanvasElement;
48+
};
4649
export type NgtGLOptions =
4750
| NgtRendererLike
48-
| ((canvas: NgtCanvasElement) => NgtRendererLike)
51+
| ((defaultGLOptions: NgtGLDefaultOptions) => NgtRendererLike)
4952
| Partial<NgtProperties<THREE.WebGLRenderer> | THREE.WebGLRendererParameters>
5053
| undefined;
5154
export type NgtDpr = number | [min: number, max: number];

libs/core/src/lib/utils/make.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as THREE from 'three';
2-
import type { NgtCanvasElement, NgtDpr, NgtGLOptions, NgtIntersection, NgtSize } from '../types';
2+
import type { NgtCanvasElement, NgtDpr, NgtGLDefaultOptions, NgtGLOptions, NgtIntersection, NgtSize } from '../types';
33
import { is } from './is';
44

55
const idCache: { [id: string]: boolean | undefined } = {};
@@ -28,15 +28,18 @@ export function makeRendererInstance<TCanvas extends NgtCanvasElement>(
2828
glOptions: NgtGLOptions,
2929
canvas: TCanvas,
3030
): THREE.WebGLRenderer {
31-
const customRenderer = (typeof glOptions === 'function' ? glOptions(canvas) : glOptions) as THREE.WebGLRenderer;
32-
if (is.renderer(customRenderer)) return customRenderer;
33-
return new THREE.WebGLRenderer({
31+
const defaultOptions: NgtGLDefaultOptions = {
3432
powerPreference: 'high-performance',
3533
canvas,
3634
antialias: true,
3735
alpha: true,
38-
...glOptions,
39-
});
36+
};
37+
38+
const customRenderer = (
39+
typeof glOptions === 'function' ? glOptions(defaultOptions) : glOptions
40+
) as THREE.WebGLRenderer;
41+
if (is.renderer(customRenderer)) return customRenderer;
42+
return new THREE.WebGLRenderer({ ...defaultOptions, ...glOptions });
4043
}
4144

4245
export function makeCameraInstance(isOrthographic: boolean, size: NgtSize) {

0 commit comments

Comments
 (0)