container.d.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /**
  2. * Represents an unpacked KTX 2.0 texture container. Data for individual mip levels are stored in
  3. * the `.levels` array, typically compressed in Basis Universal formats. Additional properties
  4. * provide metadata required to process, transcode, and upload these textures.
  5. */
  6. export declare class KTX2Container {
  7. /**
  8. * Specifies the image format using Vulkan VkFormat enum values. When using Basis Universal
  9. * texture formats, `vkFormat` must be VK_FORMAT_UNDEFINED.
  10. */
  11. vkFormat: number;
  12. /**
  13. * Size of the data type in bytes used to upload the data to a graphics API. When `vkFormat` is
  14. * VK_FORMAT_UNDEFINED, `typeSize` must be 1.
  15. */
  16. typeSize: number;
  17. /** Width of the texture image for level 0, in pixels. */
  18. pixelWidth: number;
  19. /** Height of the texture image for level 0, in pixels. */
  20. pixelHeight: number;
  21. /** Depth of the texture image for level 0, in pixels (3D textures only). */
  22. pixelDepth: number;
  23. /** Number of array elements (array textures only). */
  24. layerCount: number;
  25. /**
  26. * Number of cubemap faces. For cubemaps and cubemap arrays, `faceCount` must be 6. For all
  27. * other textures, `faceCount` must be 1. Cubemap faces are stored in +X, -X, +Y, -Y, +Z, -Z
  28. * order.
  29. */
  30. faceCount: number;
  31. /** Indicates which supercompression scheme has been applied to mip level images, if any. */
  32. supercompressionScheme: number;
  33. /** Mip levels, ordered largest (original) to smallest (~1px). */
  34. levels: KTX2Level[];
  35. /** Data Format Descriptor. */
  36. dataFormatDescriptor: KTX2DataFormatDescriptorBasicFormat[];
  37. /** Key/Value Data. */
  38. keyValue: {
  39. [key: string]: string | Uint8Array;
  40. };
  41. /** Supercompression Global Data. */
  42. globalData: KTX2GlobalDataBasisLZ | null;
  43. }
  44. export interface KTX2Level {
  45. /** Compressed data of the mip level. */
  46. levelData: Uint8Array;
  47. /**
  48. * Size of the mip level after reflation from supercompression, if applicable. When
  49. * `supercompressionType` is BASISLZ, `uncompressedByteLength` must be 0. When
  50. * `supercompressionType` is `NONE`, `uncompressedByteLength` must match the `levelData` byte
  51. * length.
  52. *
  53. * _**NOTICE:** this implies that for formats such as UASTC, `uncompressedByteLength` may
  54. * indicate size after ZSTD reflation (and of transcoded ASTC data), but does _not_ indicate
  55. * size of decoded RGBA32 pixels._
  56. */
  57. uncompressedByteLength: number;
  58. }
  59. export interface KTX2DataFormatDescriptorBasicFormat {
  60. vendorId: number;
  61. descriptorType: number;
  62. versionNumber: number;
  63. /** @deprecated Inferred. */
  64. descriptorBlockSize: number;
  65. colorModel: number;
  66. colorPrimaries: number;
  67. transferFunction: number;
  68. flags: number;
  69. texelBlockDimension: [number, number, number, number];
  70. bytesPlane: [number, number, number, number, number, number, number, number];
  71. samples: KTX2BasicFormatSample[];
  72. }
  73. export interface KTX2BasicFormatSample {
  74. bitOffset: number;
  75. bitLength: number;
  76. /** @deprecated Renamed to 'channelType'. */
  77. channelID?: number;
  78. channelType: number;
  79. samplePosition: number[];
  80. sampleLower: number;
  81. sampleUpper: number;
  82. }
  83. export interface KTX2GlobalDataBasisLZ {
  84. endpointCount: number;
  85. selectorCount: number;
  86. imageDescs: KTX2GlobalDataBasisLZImageDesc[];
  87. endpointsData: Uint8Array;
  88. selectorsData: Uint8Array;
  89. tablesData: Uint8Array;
  90. extendedData: Uint8Array;
  91. }
  92. interface KTX2GlobalDataBasisLZImageDesc {
  93. imageFlags: number;
  94. rgbSliceByteOffset: number;
  95. rgbSliceByteLength: number;
  96. alphaSliceByteOffset: number;
  97. alphaSliceByteLength: number;
  98. }
  99. export {};