fix: prefer webgl for devices with webgpu and no float32-blendable feature flag #1899 (#1933)

Co-authored-by: Tony <32993852+0xREDACTED@users.noreply.github.com>
This commit is contained in:
anthops
2025-04-24 02:02:52 +09:30
committed by GitHub
parent cdebd05dc9
commit 7d49dff074
3 changed files with 16 additions and 4 deletions

View File

@ -68,6 +68,15 @@ type TweenNode = {
stop: () => void
}
async function determineGraphicsAPI(): Promise<"webgpu" | "webgl"> {
const adapter = await navigator.gpu?.requestAdapter().catch(() => null)
if (!adapter) {
return "webgl"
}
// Devices with WebGPU but no float32-blendable feature fail to render the graph
return adapter.features.has("float32-blendable") ? "webgpu" : "webgl"
}
async function renderGraph(graph: HTMLElement, fullSlug: FullSlug) {
const slug = simplifySlug(fullSlug)
const visited = getVisited()
@ -349,6 +358,7 @@ async function renderGraph(graph: HTMLElement, fullSlug: FullSlug) {
tweens.forEach((tween) => tween.stop())
tweens.clear()
const pixiPreference = await determineGraphicsAPI()
const app = new Application()
await app.init({
width,
@ -357,7 +367,7 @@ async function renderGraph(graph: HTMLElement, fullSlug: FullSlug) {
autoStart: false,
autoDensity: true,
backgroundAlpha: 0,
preference: "webgpu",
preference: pixiPreference,
resolution: window.devicePixelRatio,
eventMode: "static",
})