mirror of
https://github.com/OpenCut-app/OpenCut.git
synced 2026-07-13 21:52:53 +02:00
fix: don't crash when GPU isn't available
This commit is contained in:
@@ -5,17 +5,27 @@ import {
|
|||||||
} from "opencut-wasm";
|
} from "opencut-wasm";
|
||||||
import type { EffectPass, EffectUniformValue } from "@/lib/effects/types";
|
import type { EffectPass, EffectUniformValue } from "@/lib/effects/types";
|
||||||
|
|
||||||
let initializeGpuRendererPromise: Promise<void> | null = null;
|
let gpuAvailable = false;
|
||||||
|
let initPromise: Promise<void> | null = null;
|
||||||
|
|
||||||
export function initializeGpuRenderer(): Promise<void> {
|
export function initializeGpuRenderer(): Promise<void> {
|
||||||
if (!initializeGpuRendererPromise) {
|
if (!initPromise) {
|
||||||
initializeGpuRendererPromise = initializeGpu();
|
initPromise = initializeGpu()
|
||||||
|
.then(() => {
|
||||||
|
gpuAvailable = true;
|
||||||
|
})
|
||||||
|
.catch((error: unknown) => {
|
||||||
|
gpuAvailable = false;
|
||||||
|
const message =
|
||||||
|
error instanceof Error ? error.message : String(error);
|
||||||
|
console.warn(`GPU renderer unavailable: ${message}`);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
const promise = initializeGpuRendererPromise;
|
return initPromise;
|
||||||
if (!promise) {
|
|
||||||
throw new Error("GPU renderer initialization promise was not created");
|
|
||||||
}
|
}
|
||||||
return promise;
|
|
||||||
|
export function isGpuAvailable(): boolean {
|
||||||
|
return gpuAvailable;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const gpuRenderer = {
|
export const gpuRenderer = {
|
||||||
@@ -30,7 +40,7 @@ export const gpuRenderer = {
|
|||||||
height: number;
|
height: number;
|
||||||
passes: EffectPass[];
|
passes: EffectPass[];
|
||||||
}): CanvasImageSource {
|
}): CanvasImageSource {
|
||||||
if (passes.length === 0) {
|
if (passes.length === 0 || !gpuAvailable) {
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,6 +69,10 @@ export const gpuRenderer = {
|
|||||||
height: number;
|
height: number;
|
||||||
feather: number;
|
feather: number;
|
||||||
}): CanvasImageSource {
|
}): CanvasImageSource {
|
||||||
|
if (!gpuAvailable) {
|
||||||
|
return maskCanvas;
|
||||||
|
}
|
||||||
|
|
||||||
const sourceCanvas = ensureOffscreenCanvas({
|
const sourceCanvas = ensureOffscreenCanvas({
|
||||||
source: maskCanvas,
|
source: maskCanvas,
|
||||||
width,
|
width,
|
||||||
|
|||||||
Reference in New Issue
Block a user