import type { TypedArray, TextureFormat, ExternalImage } from '@luma.gl/core'; export type TextureImageSource = ExternalImage; /** * One mip level * Basic data structure is similar to `ImageData` * additional optional fields can describe compressed texture data. */ export type TextureImageData = { /** Preferred WebGPU style format string. */ textureFormat?: TextureFormat; /** WebGPU style format string. Defaults to 'rgba8unorm' */ format?: TextureFormat; /** Typed Array with the bytes of the image. @note beware row byte alignment requirements */ data: TypedArray; /** Width of the image, in pixels, @note beware row byte alignment requirements */ width: number; /** Height of the image, in rows */ height: number; }; /** * A single mip-level can be initialized by data or an ImageBitmap etc * @note in the WebGPU spec a mip-level is called a subresource */ export type TextureMipLevelData = TextureImageData | TextureImageSource; /** * Texture data for one image "slice" (which can consist of multiple miplevels) * Thus data for one slice be a single mip level or an array of miplevels * @note in the WebGPU spec each cross-section image in a 3D texture is called a "slice", * in a array texture each image in the array is called an array "layer" * luma.gl calls one image in a GPU texture a "slice" regardless of context. */ export type TextureSliceData = TextureMipLevelData | TextureMipLevelData[]; /** Names of cube texture faces */ export type TextureCubeFace = '+X' | '-X' | '+Y' | '-Y' | '+Z' | '-Z'; /** Array of cube texture faces. @note: index in array is the face index */ export declare const TEXTURE_CUBE_FACES: readonly ["+X", "-X", "+Y", "-Y", "+Z", "-Z"]; /** Map of cube texture face names to face indexes */ export declare const TEXTURE_CUBE_FACE_MAP: { readonly '+X': 0; readonly '-X': 1; readonly '+Y': 2; readonly '-Y': 3; readonly '+Z': 4; readonly '-Z': 5; }; /** @todo - Define what data type is supported for 1D textures. TextureImageData with height = 1 */ export type Texture1DData = TextureSliceData; /** Texture data can be one or more mip levels */ export type Texture2DData = TextureSliceData; /** 6 face textures */ export type TextureCubeData = Record; /** Array of textures */ export type Texture3DData = TextureSliceData[]; /** Array of textures */ export type TextureArrayData = TextureSliceData[]; /** Array of 6 face textures */ export type TextureCubeArrayData = Record[]; type TextureData = Texture1DData | Texture3DData | TextureArrayData | TextureCubeArrayData | TextureCubeData; /** Sync data props */ export type TextureDataProps = { dimension: '1d'; data: Texture1DData | null; } | { dimension?: '2d'; data: Texture2DData | null; } | { dimension: '3d'; data: Texture3DData | null; } | { dimension: '2d-array'; data: TextureArrayData | null; } | { dimension: 'cube'; data: TextureCubeData | null; } | { dimension: 'cube-array'; data: TextureCubeArrayData | null; }; /** Async data props */ export type TextureDataAsyncProps = { dimension: '1d'; data?: Promise | Texture1DData | null; } | { dimension?: '2d'; data?: Promise | Texture2DData | null; } | { dimension: '3d'; data?: Promise | Texture3DData | null; } | { dimension: '2d-array'; data?: Promise | TextureArrayData | null; } | { dimension: 'cube'; data?: Promise | TextureCubeData | null; } | { dimension: 'cube-array'; data?: Promise | TextureCubeArrayData | null; }; /** Describes data for one sub resource (one mip level of one slice (depth or array layer)) */ export type TextureSubresource = { /** slice (depth or array layer)) */ z: number; /** mip level (0 - max mip levels) */ mipLevel: number; } & ({ type: 'external-image'; image: ExternalImage; /** @deprecated is this an appropriate place for this flag? */ flipY?: boolean; } | { type: 'texture-data'; data: TextureImageData; textureFormat?: TextureFormat; }); /** Check if texture data is a typed array */ export declare function isTextureSliceData(data: TextureData): data is TextureImageData; export declare function getFirstMipLevel(layer: TextureSliceData | null): TextureMipLevelData | null; export declare function getTextureSizeFromData(props: TextureDataProps): { width: number; height: number; } | null; export declare function resolveTextureImageFormat(data: TextureImageData): TextureFormat | undefined; /** Resolve size for a single mip-level datum */ /** Convert cube face label to depth index */ export declare function getCubeFaceIndex(face: TextureCubeFace): number; /** Convert cube face label to texture slice index. Index can be used with `setTexture2DData()`. */ export declare function getCubeArrayFaceIndex(cubeIndex: number, face: TextureCubeFace): number; /** Experimental: Set multiple mip levels (1D) */ export declare function getTexture1DSubresources(data: Texture1DData): TextureSubresource[]; /** Experimental: Set multiple mip levels (2D), optionally at `z` (depth/array index) */ export declare function getTexture2DSubresources(slice: number, lodData: Texture2DData, baseLevelSize?: { width: number; height: number; }, textureFormat?: TextureFormat): TextureSubresource[]; /** 3D: multiple depth slices, each may carry multiple mip levels */ export declare function getTexture3DSubresources(data: Texture3DData): TextureSubresource[]; /** 2D array: multiple layers, each may carry multiple mip levels */ export declare function getTextureArraySubresources(data: TextureArrayData): TextureSubresource[]; /** Cube: 6 faces, each may carry multiple mip levels */ export declare function getTextureCubeSubresources(data: TextureCubeData): TextureSubresource[]; /** Cube array: multiple cubes (faces×layers), each face may carry multiple mips */ export declare function getTextureCubeArraySubresources(data: TextureCubeArrayData): TextureSubresource[]; export {}; //# sourceMappingURL=texture-data.d.ts.map