Files
nothoughts/node_modules/pixi.js/lib/rendering/renderers/gpu/GpuDeviceSystem.js
2025-08-04 18:57:35 +02:00

80 lines
2.1 KiB
JavaScript

'use strict';
var adapter = require('../../../environment/adapter.js');
var Extensions = require('../../../extensions/Extensions.js');
"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$1 = await adapter.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$1.features.has(feature));
const device = await adapter$1.requestDevice({
requiredFeatures
});
return { adapter: adapter$1, device };
}
destroy() {
this.gpu = null;
this._renderer = null;
}
}
/** @ignore */
GpuDeviceSystem.extension = {
type: [
Extensions.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
};
exports.GpuDeviceSystem = GpuDeviceSystem;
//# sourceMappingURL=GpuDeviceSystem.js.map