UNPKG

pixi.js

Version:

<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">

78 lines (75 loc) 2.15 kB
import { DOMAdapter } from '../../../environment/adapter.mjs'; import { ExtensionType } from '../../../extensions/Extensions.mjs'; "use strict"; class GpuDeviceSystem { /** * @param {WebGPURenderer} renderer - The renderer this System works for. */ constructor(renderer) { this._renderer = renderer; } async init(options) { if (this._initPromise) return this._initPromise; this._initPromise = this._createDeviceAndAdaptor(options).then((gpu) => { this.gpu = gpu; this._renderer.runners.contextChange.emit(this.gpu); }); return this._initPromise; } /** * Handle the context change event * @param gpu */ contextChange(gpu) { this._renderer.gpu = gpu; } /** * Helper class to create a WebGL Context * @param {object} options - An options object that gets passed in to the canvas element containing the * context attributes * @see https://developer.mozilla.org/en/docs/Web/API/HTMLCanvasElement/getContext * @returns {WebGLRenderingContext} the WebGL context */ async _createDeviceAndAdaptor(options) { const adapter = await DOMAdapter.get().getNavigator().gpu.requestAdapter({ powerPreference: options.powerPreference, forceFallbackAdapter: options.forceFallbackAdapter }); const requiredFeatures = [ "texture-compression-bc", "texture-compression-astc", "texture-compression-etc2" ].filter((feature) => adapter.features.has(feature)); const device = await adapter.requestDevice({ requiredFeatures }); return { adapter, device }; } destroy() { this.gpu = null; this._renderer = null; } } /** @ignore */ GpuDeviceSystem.extension = { type: [ ExtensionType.WebGPUSystem ], name: "device" }; /** The default options for the GpuDeviceSystem. */ GpuDeviceSystem.defaultOptions = { /** * {@link WebGPUOptions.powerPreference} * @default default */ powerPreference: void 0, /** * Force the use of the fallback adapter * @default false */ forceFallbackAdapter: false }; export { GpuDeviceSystem }; //# sourceMappingURL=GpuDeviceSystem.mjs.map