@babylonjs/core
Version:
Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.
158 lines (157 loc) • 6.8 kB
TypeScript
import type { InternalTexture } from "../Materials/Textures/internalTexture.js";
import type { AbstractEngine } from "../Engines/abstractEngine.js";
import { AutoReleaseWorkerPool } from "./workerPool.js";
import type { Nullable } from "../types.js";
import type { IDecodedData, IKTX2DecoderOptions } from "../Materials/Textures/ktx2decoderTypes.js";
import type { AllowedKeys } from "./khronosTextureContainer2Worker.js";
/**
* Class that defines the default KTX2 decoder options.
*
* This class is useful for providing options to the KTX2 decoder to control how the source data is transcoded.
*/
export declare class DefaultKTX2DecoderOptions {
private _isDirty;
/**
* Gets the dirty flag
*/
get isDirty(): boolean;
private _useRGBAIfASTCBC7NotAvailableWhenUASTC?;
/**
* force a (uncompressed) RGBA transcoded format if transcoding a UASTC source format and ASTC + BC7 are not available as a compressed transcoded format
*/
get useRGBAIfASTCBC7NotAvailableWhenUASTC(): boolean | undefined;
set useRGBAIfASTCBC7NotAvailableWhenUASTC(value: boolean | undefined);
private _useRGBAIfOnlyBC1BC3AvailableWhenUASTC?;
/**
* force a (uncompressed) RGBA transcoded format if transcoding a UASTC source format and only BC1 or BC3 are available as a compressed transcoded format.
* This property is true by default to favor speed over memory, because currently transcoding from UASTC to BC1/3 is slow because the transcoder transcodes
* to uncompressed and then recompresses the texture
*/
get useRGBAIfOnlyBC1BC3AvailableWhenUASTC(): boolean | undefined;
set useRGBAIfOnlyBC1BC3AvailableWhenUASTC(value: boolean | undefined);
private _forceRGBA?;
/**
* force to always use (uncompressed) RGBA for transcoded format
*/
get forceRGBA(): boolean | undefined;
set forceRGBA(value: boolean | undefined);
private _forceR8?;
/**
* force to always use (uncompressed) R8 for transcoded format
*/
get forceR8(): boolean | undefined;
set forceR8(value: boolean | undefined);
private _forceRG8?;
/**
* force to always use (uncompressed) RG8 for transcoded format
*/
get forceRG8(): boolean | undefined;
set forceRG8(value: boolean | undefined);
private _bypassTranscoders?;
/**
* list of transcoders to bypass when looking for a suitable transcoder. The available transcoders are:
* UniversalTranscoder_UASTC_ASTC
* UniversalTranscoder_UASTC_BC7
* UniversalTranscoder_UASTC_RGBA_UNORM
* UniversalTranscoder_UASTC_RGBA_SRGB
* UniversalTranscoder_UASTC_R8_UNORM
* UniversalTranscoder_UASTC_RG8_UNORM
* MSCTranscoder
*/
get bypassTranscoders(): string[] | undefined;
set bypassTranscoders(value: string[] | undefined);
private _ktx2DecoderOptions;
/** @internal */
_getKTX2DecoderOptions(): IKTX2DecoderOptions;
}
/**
* Options for the KTX2 decoder
*/
export interface IKhronosTextureContainer2Options {
/**
* Number of workers to use for async operations. Specify `0` to disable web workers and run synchronously in the current context.
*/
numWorkers?: number;
/**
* Worker pool to use for async operations. If set, `numWorkers` will be ignored.
*/
workerPool?: AutoReleaseWorkerPool;
/**
* Optional container for the KTX2 decoder module and its dependencies. If set, the module will be used from this container and the URLs will be ignored.
*/
binariesAndModulesContainer?: {
[key in AllowedKeys]?: ArrayBuffer | any;
};
}
/**
* Class for loading KTX2 files
*/
export declare class KhronosTextureContainer2 {
private static _WorkerPoolPromise?;
private static _DecoderModulePromise?;
private static _KTX2DecoderModule?;
/**
* URLs to use when loading the KTX2 decoder module as well as its dependencies
* If a url is null, the default url is used (pointing to https://preview.babylonjs.com)
* Note that jsDecoderModule can't be null and that the other dependencies will only be loaded if necessary
* Urls you can change:
* URLConfig.jsDecoderModule
* URLConfig.wasmUASTCToASTC
* URLConfig.wasmUASTCToBC7
* URLConfig.wasmUASTCToRGBA_UNORM
* URLConfig.wasmUASTCToRGBA_SRGB
* URLConfig.wasmUASTCToR8_UNORM
* URLConfig.wasmUASTCToRG8_UNORM
* URLConfig.jsMSCTranscoder
* URLConfig.wasmMSCTranscoder
* URLConfig.wasmZSTDDecoder
* You can see their default values in this PG: https://playground.babylonjs.com/#EIJH8L#29
*/
static URLConfig: {
jsDecoderModule: string;
wasmUASTCToASTC: Nullable<string>;
wasmUASTCToBC7: Nullable<string>;
wasmUASTCToRGBA_UNORM: Nullable<string>;
wasmUASTCToRGBA_SRGB: Nullable<string>;
wasmUASTCToR8_UNORM: Nullable<string>;
wasmUASTCToRG8_UNORM: Nullable<string>;
jsMSCTranscoder: Nullable<string>;
wasmMSCTranscoder: Nullable<string>;
wasmZSTDDecoder: Nullable<string>;
};
/**
* If provided, this worker pool will be used instead of creating a new one.
* This is useful when loading the WASM and the js modules on your own and
* you want to use the ktxTextureLoader and not construct this class directly.
*/
static WorkerPool?: AutoReleaseWorkerPool;
/**
* Default number of workers used to handle data decoding
*/
static DefaultNumWorkers: number;
/**
* Default configuration for the KTX2 decoder.
* The options defined in this way have priority over those passed when creating a KTX2 texture with new Texture(...).
*/
static DefaultDecoderOptions: DefaultKTX2DecoderOptions;
private static GetDefaultNumWorkers;
private _engine;
private static _Initialize;
/**
* Constructor
* @param engine The engine to use
* @param numWorkersOrOptions The number of workers for async operations. Specify `0` to disable web workers and run synchronously in the current context.
*/
constructor(engine: AbstractEngine, numWorkersOrOptions?: number | IKhronosTextureContainer2Options);
/**
* @internal
*/
_uploadAsync(data: ArrayBufferView, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData): Promise<void>;
protected _createTexture(data: IDecodedData, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData): void;
/**
* Checks if the given data starts with a KTX2 file identifier.
* @param data the data to check
* @returns true if the data is a KTX2 file or false otherwise
*/
static IsValid(data: ArrayBufferView): boolean;
}