///
import { ExtensionType } from '../../../extensions/Extensions';
import type { System } from '../shared/system/System';
import type { GpuPowerPreference } from '../types';
import type { WebGPURenderer } from './WebGPURenderer';
/** The GPU object. */
export interface GPU {
/** The GPU adapter */
adapter: GPUAdapter;
/** The GPU device */
device: GPUDevice;
}
/**
* Options for the WebGPU context.
* @property {GpuPowerPreference} [powerPreference=default] - An optional hint indicating what configuration of GPU
* is suitable for the WebGPU context, can be `'high-performance'` or `'low-power'`.
* Setting to `'high-performance'` will prioritize rendering performance over power consumption,
* while setting to `'low-power'` will prioritize power saving over rendering performance.
* @property {boolean} [forceFallbackAdapter=false] - Force the use of the fallback adapter
* @memberof rendering
*/
export interface GpuContextOptions {
/**
* An optional hint indicating what configuration of GPU is suitable for the WebGPU context,
* can be `'high-performance'` or `'low-power'`.
* Setting to `'high-performance'` will prioritize rendering performance over power consumption,
* while setting to `'low-power'` will prioritize power saving over rendering performance.
* @default undefined
* @memberof rendering.WebGPUOptions
*/
powerPreference?: GpuPowerPreference;
/**
* Force the use of the fallback adapter
* @default false
* @memberof rendering.WebGPUOptions
*/
forceFallbackAdapter: boolean;
}
/**
* System plugin to the renderer to manage the context.
* @class
* @memberof rendering
*/
export declare class GpuDeviceSystem implements System {
/** @ignore */
static extension: {
readonly type: readonly [ExtensionType.WebGPUSystem];
readonly name: "device";
};
/** The default options for the GpuDeviceSystem. */
static defaultOptions: GpuContextOptions;
/** The GPU device */
gpu: GPU;
private _renderer;
private _initPromise;
/**
* @param {WebGPURenderer} renderer - The renderer this System works for.
*/
constructor(renderer: WebGPURenderer);
init(options: GpuContextOptions): Promise;
/**
* Handle the context change event
* @param gpu
*/
protected contextChange(gpu: GPU): void;
/**
* 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
*/
private _createDeviceAndAdaptor;
destroy(): void;
}