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">
1 lines • 6.38 kB
Source Map (JSON)
{"version":3,"file":"GpuDeviceSystem.mjs","sources":["../../../../src/rendering/renderers/gpu/GpuDeviceSystem.ts"],"sourcesContent":["import { DOMAdapter } from '../../../environment/adapter';\nimport { ExtensionType } from '../../../extensions/Extensions';\n\nimport type { System } from '../shared/system/System';\nimport type { GpuPowerPreference } from '../types';\nimport type { WebGPURenderer } from './WebGPURenderer';\n\n/**\n * The GPU object.\n * Contains the GPU adapter and device.\n * @category rendering\n * @advanced\n */\nexport interface GPU\n{\n /** The GPU adapter */\n adapter: GPUAdapter;\n /** The GPU device */\n device: GPUDevice;\n}\n\n/**\n * Options for the WebGPU context.\n * @property {GpuPowerPreference} [powerPreference=default] - An optional hint indicating what configuration of GPU\n * is suitable for the WebGPU context, can be `'high-performance'` or `'low-power'`.\n * Setting to `'high-performance'` will prioritize rendering performance over power consumption,\n * while setting to `'low-power'` will prioritize power saving over rendering performance.\n * @property {boolean} [forceFallbackAdapter=false] - Force the use of the fallback adapter\n * @category rendering\n * @advanced\n */\nexport interface GpuContextOptions\n{\n /**\n * An optional hint indicating what configuration of GPU is suitable for the WebGPU context,\n * can be `'high-performance'` or `'low-power'`.\n * Setting to `'high-performance'` will prioritize rendering performance over power consumption,\n * while setting to `'low-power'` will prioritize power saving over rendering performance.\n * @default undefined\n */\n powerPreference?: GpuPowerPreference;\n /**\n * Force the use of the fallback adapter\n * @default false\n */\n forceFallbackAdapter: boolean;\n /** Using shared device and adaptor from other engine */\n gpu?: GPU;\n}\n\n/**\n * System plugin to the renderer to manage the context.\n * @class\n * @category rendering\n * @advanced\n */\nexport class GpuDeviceSystem implements System<GpuContextOptions>\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGPUSystem,\n ],\n name: 'device',\n } as const;\n\n /** The default options for the GpuDeviceSystem. */\n public static defaultOptions: GpuContextOptions = {\n /**\n * {@link WebGPUOptions.powerPreference}\n * @default default\n */\n powerPreference: undefined,\n /**\n * Force the use of the fallback adapter\n * @default false\n */\n forceFallbackAdapter: false,\n };\n\n /** The GPU device */\n public gpu: GPU;\n\n private _renderer: WebGPURenderer;\n private _initPromise: Promise<void>;\n\n /**\n * @param {WebGPURenderer} renderer - The renderer this System works for.\n */\n constructor(renderer: WebGPURenderer)\n {\n this._renderer = renderer;\n }\n\n public async init(options: GpuContextOptions): Promise<void>\n {\n if (this._initPromise) return this._initPromise;\n\n this._initPromise = (options.gpu ? Promise.resolve(options.gpu) : this._createDeviceAndAdaptor(options))\n .then((gpu) =>\n {\n this.gpu = gpu;\n\n this._renderer.runners.contextChange.emit(this.gpu);\n });\n\n return this._initPromise;\n }\n\n /**\n * Handle the context change event\n * @param gpu\n */\n protected contextChange(gpu: GPU): void\n {\n this._renderer.gpu = gpu;\n }\n\n /**\n * Helper class to create a WebGL Context\n * @param {object} options - An options object that gets passed in to the canvas element containing the\n * context attributes\n * @see https://developer.mozilla.org/en/docs/Web/API/HTMLCanvasElement/getContext\n * @returns {WebGLRenderingContext} the WebGL context\n */\n private async _createDeviceAndAdaptor(options: GpuContextOptions): Promise<GPU>\n {\n // TODO we only need one of these..\n const adapter = await DOMAdapter.get().getNavigator().gpu.requestAdapter({\n powerPreference: options.powerPreference,\n forceFallbackAdapter: options.forceFallbackAdapter,\n });\n\n const requiredFeatures = [\n 'texture-compression-bc',\n 'texture-compression-astc',\n 'texture-compression-etc2',\n ].filter((feature) => adapter.features.has(feature)) as GPUFeatureName[];\n\n // TODO and one of these!\n const device = await adapter.requestDevice({\n requiredFeatures\n });\n\n return { adapter, device };\n }\n\n public destroy(): void\n {\n this.gpu = null;\n this._renderer = null;\n }\n}\n"],"names":[],"mappings":";;;;AAwDO,MAAM,eAAA,CACb;AAAA;AAAA;AAAA;AAAA,EAgCI,YAAY,QAAA,EACZ;AACI,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AAAA,EACrB;AAAA,EAEA,MAAa,KAAK,OAAA,EAClB;AACI,IAAA,IAAI,IAAA,CAAK,YAAA,EAAc,OAAO,IAAA,CAAK,YAAA;AAEnC,IAAA,IAAA,CAAK,YAAA,GAAA,CAAgB,OAAA,CAAQ,GAAA,GAAM,OAAA,CAAQ,QAAQ,OAAA,CAAQ,GAAG,CAAA,GAAI,IAAA,CAAK,uBAAA,CAAwB,OAAO,CAAA,EACjG,IAAA,CAAK,CAAC,GAAA,KACP;AACI,MAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AAEX,MAAA,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,aAAA,CAAc,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,IACtD,CAAC,CAAA;AAEL,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMU,cAAc,GAAA,EACxB;AACI,IAAA,IAAA,CAAK,UAAU,GAAA,GAAM,GAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAc,wBAAwB,OAAA,EACtC;AAEI,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,GAAA,GAAM,YAAA,EAAa,CAAE,IAAI,cAAA,CAAe;AAAA,MACrE,iBAAiB,OAAA,CAAQ,eAAA;AAAA,MACzB,sBAAsB,OAAA,CAAQ;AAAA,KACjC,CAAA;AAED,IAAA,MAAM,gBAAA,GAAmB;AAAA,MACrB,wBAAA;AAAA,MACA,0BAAA;AAAA,MACA;AAAA,KACJ,CAAE,OAAO,CAAC,OAAA,KAAY,QAAQ,QAAA,CAAS,GAAA,CAAI,OAAO,CAAC,CAAA;AAGnD,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,aAAA,CAAc;AAAA,MACvC;AAAA,KACH,CAAA;AAED,IAAA,OAAO,EAAE,SAAS,MAAA,EAAO;AAAA,EAC7B;AAAA,EAEO,OAAA,GACP;AACI,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,EACrB;AACJ;AAAA;AAhGa,eAAA,CAGK,SAAA,GAAY;AAAA,EACtB,IAAA,EAAM;AAAA,IACF,aAAA,CAAc;AAAA,GAClB;AAAA,EACA,IAAA,EAAM;AACV,CAAA;AAAA;AARS,eAAA,CAWK,cAAA,GAAoC;AAAA;AAAA;AAAA;AAAA;AAAA,EAK9C,eAAA,EAAiB,KAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKjB,oBAAA,EAAsB;AAC1B,CAAA;;;;"}