mirror of
https://github.com/webadderallorg/Recordly.git
synced 2026-11-09 23:43:35 +00:00
Merge PR #1056 for export regression validation
This commit is contained in:
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", () => {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user