Merge PR #1056 for export regression validation

This commit is contained in:
webadderall committed 2026-10-16 18:15:09 +11:00
commit 862db39a3c
3 files changed
+38 -8

No files matched your search

@@ -260,6 +260,34 @@ describe("ModernFrameRenderer Pixi lifecycle", () => {
vi.unstubAllGlobals();
}
});
it("defaults to WebGL when no backend is preferred, even when WebGPU is available", async () => {
pixiApplicationInstancesMock.length = 0;
pixiInitializationErrorsMock.length = 0;
// Linux Chromium exposes navigator.gpu, but Pixi's WebGPU bind-group path crashes
// with "Cannot read properties of undefined (reading '_resourceType')".
vi.stubGlobal("navigator", { gpu: {} });
try {
const renderer = createRenderer() as unknown as {
config: { preferredRenderBackend?: "webgl" | "webgpu" };
createPixiApplication: (
canvas: HTMLCanvasElement,
) => Promise<{ backend: "webgl" | "webgpu" }>;
};
renderer.config.preferredRenderBackend = undefined;
await expect(renderer.createPixiApplication({} as HTMLCanvasElement)).resolves
.toMatchObject({
backend: "webgl",
});
expect(pixiInitializationErrorsMock).toHaveLength(0);
expect(pixiApplicationInstancesMock).toHaveLength(1);
} finally {
vi.unstubAllGlobals();
}
});
});
describe("ModernFrameRenderer blur export path", () => {
+7 -7
View File
@@ -623,14 +623,14 @@ export class FrameRenderer {
};
const preferredRenderBackend = this.config.preferredRenderBackend;
// WebGPU is opt-in. Linux Chromium exposes navigator.gpu, but Pixi's WebGPU
// bind-group path can crash mid-render with
// "Cannot read properties of undefined (reading '_resourceType')", which is only
// recoverable by restarting the whole export on a different backend.
const backendOrder: ExportRenderBackend[] =
preferredRenderBackend === "webgl"
? ["webgl", "webgpu"]
: preferredRenderBackend === "webgpu"
? ["webgpu", "webgl"]
: typeof navigator !== "undefined" && "gpu" in navigator
? ["webgpu", "webgl"]
: ["webgl"];
preferredRenderBackend === "webgpu"
? ["webgpu", "webgl"]
: ["webgl", "webgpu"];
const failures: PixiRendererAttempt[] = [];
for (const backend of backendOrder) {
+3 -1
View File
@@ -49,6 +49,7 @@ import {
} from "@/lib/wallpapers";
import { AudioProcessor, isAacAudioEncodingSupported } from "./audioEncoder";
import {
getDefaultLightningRenderBackend,
normalizeLightningRuntimePlatform,
shouldPreferNativeAutoBackend,
shouldPreferNativeStaticLayoutBeforeBreeze,
@@ -604,7 +605,8 @@ export class ModernVideoExporter {
timelineEffects: this.config.clipRegions !== undefined,
width: this.config.width,
height: this.config.height,
preferredRenderBackend: undefined,
preferredRenderBackend:
this.config.preferredRenderBackend ?? getDefaultLightningRenderBackend(),
wallpaper: this.config.wallpaper,
zoomRegions: this.config.zoomRegions,
showShadow: this.config.showShadow,