@bis-toolkit/bcn 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +63 -0
- package/dist/bc1.d.ts +5 -0
- package/dist/bc2.d.ts +5 -0
- package/dist/bc3.d.ts +5 -0
- package/dist/bc4.d.ts +5 -0
- package/dist/bc5.d.ts +5 -0
- package/dist/bc7.d.ts +5 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +1164 -0
- package/dist/index.js.map +7 -0
- package/dist/utils.d.ts +24 -0
- package/package.json +48 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils.ts", "../src/bc1.ts", "../src/bc2.ts", "../src/bc3.ts", "../src/bc4.ts", "../src/bc5.ts", "../src/bc7.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Shared utilities for BC decoders\n * Source: https://github.com/Nominom/BCnEncoder.NET\n */\n\nexport interface ColorRgba32 {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\nexport interface ColorRgb24 {\n r: number;\n g: number;\n b: number;\n}\n\n// RGB565 color (5 bits red, 6 bits green, 5 bits blue)\nexport class ColorRgb565 {\n data: number;\n\n constructor(r?: number, g?: number, b?: number) {\n if (r !== undefined && g !== undefined && b !== undefined) {\n // Convert 8-bit RGB to 565\n const r5 = (r >> 3) & 0x1F;\n const g6 = (g >> 2) & 0x3F;\n const b5 = (b >> 3) & 0x1F;\n this.data = (r5 << 11) | (g6 << 5) | b5;\n } else {\n this.data = 0;\n }\n }\n\n toColorRgb24(): ColorRgb24 {\n const r5 = (this.data >> 11) & 0x1F;\n const g6 = (this.data >> 5) & 0x3F;\n const b5 = this.data & 0x1F;\n\n // Expand to 8-bit\n const r = (r5 << 3) | (r5 >> 2);\n const g = (g6 << 2) | (g6 >> 4);\n const b = (b5 << 3) | (b5 >> 2);\n\n return { r, g, b };\n }\n}\n\n// Color interpolation helpers\nexport function interpolateHalf(c0: ColorRgb24, c1: ColorRgb24): ColorRgb24 {\n return {\n r: ((c0.r + c1.r) / 2) | 0,\n g: ((c0.g + c1.g) / 2) | 0,\n b: ((c0.b + c1.b) / 2) | 0\n };\n}\n\nexport function interpolateThird(c0: ColorRgb24, c1: ColorRgb24, step: number): ColorRgb24 {\n if (step === 1) {\n return {\n r: ((2 * c0.r + c1.r) / 3) | 0,\n g: ((2 * c0.g + c1.g) / 3) | 0,\n b: ((2 * c0.b + c1.b) / 3) | 0\n };\n } else { // step === 2\n return {\n r: ((c0.r + 2 * c1.r) / 3) | 0,\n g: ((c0.g + 2 * c1.g) / 3) | 0,\n b: ((c0.b + 2 * c1.b) / 3) | 0\n };\n }\n}\n\n// Byte interpolation for alpha/component channels\nexport function interpolateByteFifth(e0: number, e1: number, step: number): number {\n if (step === 1) return ((4 * e0 + e1) / 5) | 0;\n if (step === 2) return ((3 * e0 + 2 * e1) / 5) | 0;\n if (step === 3) return ((2 * e0 + 3 * e1) / 5) | 0;\n return ((e0 + 4 * e1) / 5) | 0; // step === 4\n}\n\nexport function interpolateByteSeventh(e0: number, e1: number, step: number): number {\n if (step === 1) return ((6 * e0 + e1) / 7) | 0;\n if (step === 2) return ((5 * e0 + 2 * e1) / 7) | 0;\n if (step === 3) return ((4 * e0 + 3 * e1) / 7) | 0;\n if (step === 4) return ((3 * e0 + 4 * e1) / 7) | 0;\n if (step === 5) return ((2 * e0 + 5 * e1) / 7) | 0;\n return ((e0 + 6 * e1) / 7) | 0; // step === 6\n}\n", "/**\n * BC1 (DXT1) Decoder\n * Source: https://github.com/Nominom/BCnEncoder.NET\n */\n\nimport { ColorRgb565, interpolateHalf, interpolateThird } from './utils';\n\nexport function decodeBC1(data: DataView, width: number, height: number, useAlpha = false): Uint8Array {\n const rgba = new Uint8Array(width * height * 4);\n const blocksX = Math.ceil(width / 4);\n const blocksY = Math.ceil(height / 4);\n\n let offset = 0;\n for (let by = 0; by < blocksY; by++) {\n for (let bx = 0; bx < blocksX; bx++) {\n const color0Data = data.getUint16(offset, true);\n const color1Data = data.getUint16(offset + 2, true);\n const indices = data.getUint32(offset + 4, true);\n\n const color0 = new ColorRgb565();\n color0.data = color0Data;\n const color1 = new ColorRgb565();\n color1.data = color1Data;\n\n const c0 = color0.toColorRgb24();\n const c1 = color1.toColorRgb24();\n\n const hasAlphaOrBlack = color0Data <= color1Data;\n const actualUseAlpha = useAlpha && hasAlphaOrBlack;\n\n // Build color palette\n const colors = hasAlphaOrBlack ? [\n c0,\n c1,\n interpolateHalf(c0, c1),\n { r: 0, g: 0, b: 0 }\n ] : [\n c0,\n c1,\n interpolateThird(c0, c1, 1),\n interpolateThird(c0, c1, 2)\n ];\n\n // Decode 4x4 block\n for (let y = 0; y < 4; y++) {\n for (let x = 0; x < 4; x++) {\n const px = bx * 4 + x;\n const py = by * 4 + y;\n\n if (px < width && py < height) {\n const i = y * 4 + x;\n const colorIndex = (indices >> (i * 2)) & 0b11;\n const color = colors[colorIndex];\n\n const dstIdx = (py * width + px) * 4;\n\n if (actualUseAlpha && colorIndex === 3) {\n rgba[dstIdx] = 0;\n rgba[dstIdx + 1] = 0;\n rgba[dstIdx + 2] = 0;\n rgba[dstIdx + 3] = 0;\n } else {\n rgba[dstIdx] = color.r;\n rgba[dstIdx + 1] = color.g;\n rgba[dstIdx + 2] = color.b;\n rgba[dstIdx + 3] = 255;\n }\n }\n }\n }\n\n offset += 8;\n }\n }\n\n return rgba;\n}\n", "/**\n * BC2 (DXT3) Decoder - RGBA with explicit alpha\n * Source: https://github.com/Nominom/BCnEncoder.NET\n */\n\nimport { ColorRgb565, interpolateThird } from './utils';\n\nexport function decodeBC2(data: DataView, width: number, height: number): Uint8Array {\n const rgba = new Uint8Array(width * height * 4);\n const blocksX = Math.ceil(width / 4);\n const blocksY = Math.ceil(height / 4);\n\n let offset = 0;\n for (let by = 0; by < blocksY; by++) {\n for (let bx = 0; bx < blocksX; bx++) {\n // Read alpha block (64 bits = 16 pixels * 4 bits each)\n const alphaLow = data.getUint32(offset, true);\n const alphaHigh = data.getUint32(offset + 4, true);\n\n // Read color block\n const color0Data = data.getUint16(offset + 8, true);\n const color1Data = data.getUint16(offset + 10, true);\n const indices = data.getUint32(offset + 12, true);\n\n const color0 = new ColorRgb565();\n color0.data = color0Data;\n const color1 = new ColorRgb565();\n color1.data = color1Data;\n\n const c0 = color0.toColorRgb24();\n const c1 = color1.toColorRgb24();\n\n // Build color palette (BC2 always uses 4-color mode)\n const colors = [\n c0,\n c1,\n interpolateThird(c0, c1, 1),\n interpolateThird(c0, c1, 2)\n ];\n\n // Decode 4x4 block\n for (let y = 0; y < 4; y++) {\n for (let x = 0; x < 4; x++) {\n const px = bx * 4 + x;\n const py = by * 4 + y;\n\n if (px < width && py < height) {\n const i = y * 4 + x;\n const colorIndex = (indices >> (i * 2)) & 0b11;\n const color = colors[colorIndex];\n\n // Extract 4-bit alpha\n const alphaIndex = i * 4;\n let alpha: number;\n if (alphaIndex < 32) {\n alpha = (alphaLow >> alphaIndex) & 0xF;\n } else {\n alpha = (alphaHigh >> (alphaIndex - 32)) & 0xF;\n }\n // Expand 4-bit alpha to 8-bit\n alpha = (alpha << 4) | alpha;\n\n const dstIdx = (py * width + px) * 4;\n rgba[dstIdx] = color.r;\n rgba[dstIdx + 1] = color.g;\n rgba[dstIdx + 2] = color.b;\n rgba[dstIdx + 3] = alpha;\n }\n }\n }\n\n offset += 16;\n }\n }\n\n return rgba;\n}\n", "/**\n * BC3 (DXT5) Decoder - RGBA with interpolated alpha\n * Source: https://github.com/Nominom/BCnEncoder.NET\n */\n\nimport { ColorRgb565, interpolateThird, interpolateByteFifth, interpolateByteSeventh } from './utils';\n\nfunction decodeAlphaBlock(alphaData: bigint): number[] {\n const alpha = new Array<number>(16);\n\n const alpha0 = Number(alphaData & 0xFFn);\n const alpha1 = Number((alphaData >> 8n) & 0xFFn);\n\n // Build alpha palette\n const alphas = alpha0 > alpha1 ? [\n alpha0,\n alpha1,\n interpolateByteSeventh(alpha0, alpha1, 1),\n interpolateByteSeventh(alpha0, alpha1, 2),\n interpolateByteSeventh(alpha0, alpha1, 3),\n interpolateByteSeventh(alpha0, alpha1, 4),\n interpolateByteSeventh(alpha0, alpha1, 5),\n interpolateByteSeventh(alpha0, alpha1, 6)\n ] : [\n alpha0,\n alpha1,\n interpolateByteFifth(alpha0, alpha1, 1),\n interpolateByteFifth(alpha0, alpha1, 2),\n interpolateByteFifth(alpha0, alpha1, 3),\n interpolateByteFifth(alpha0, alpha1, 4),\n 0,\n 255\n ];\n\n // Decode indices (3 bits per pixel, 48 bits total starting at bit 16)\n for (let i = 0; i < 16; i++) {\n const bitOffset = 16 + i * 3;\n const index = Number((alphaData >> BigInt(bitOffset)) & 0x7n);\n alpha[i] = alphas[index];\n }\n\n return alpha;\n}\n\nexport function decodeBC3(data: DataView, width: number, height: number): Uint8Array {\n const rgba = new Uint8Array(width * height * 4);\n const blocksX = Math.ceil(width / 4);\n const blocksY = Math.ceil(height / 4);\n\n let offset = 0;\n for (let by = 0; by < blocksY; by++) {\n for (let bx = 0; bx < blocksX; bx++) {\n // Read alpha block (64 bits)\n const alphaBlock = data.getBigUint64(offset, true);\n const alphas = decodeAlphaBlock(alphaBlock);\n\n // Read color block\n const color0Data = data.getUint16(offset + 8, true);\n const color1Data = data.getUint16(offset + 10, true);\n const indices = data.getUint32(offset + 12, true);\n\n const color0 = new ColorRgb565();\n color0.data = color0Data;\n const color1 = new ColorRgb565();\n color1.data = color1Data;\n\n const c0 = color0.toColorRgb24();\n const c1 = color1.toColorRgb24();\n\n // Build color palette (BC3 always uses 4-color mode)\n const colors = [\n c0,\n c1,\n interpolateThird(c0, c1, 1),\n interpolateThird(c0, c1, 2)\n ];\n\n // Decode 4x4 block\n for (let y = 0; y < 4; y++) {\n for (let x = 0; x < 4; x++) {\n const px = bx * 4 + x;\n const py = by * 4 + y;\n\n if (px < width && py < height) {\n const i = y * 4 + x;\n const colorIndex = (indices >> (i * 2)) & 0b11;\n const color = colors[colorIndex];\n\n const dstIdx = (py * width + px) * 4;\n rgba[dstIdx] = color.r;\n rgba[dstIdx + 1] = color.g;\n rgba[dstIdx + 2] = color.b;\n rgba[dstIdx + 3] = alphas[i];\n }\n }\n }\n\n offset += 16;\n }\n }\n\n return rgba;\n}\n", "/**\n * BC4 Decoder - Single channel compression\n * Source: https://github.com/Nominom/BCnEncoder.NET\n */\n\nimport { interpolateByteFifth, interpolateByteSeventh } from './utils';\n\nfunction decodeComponentBlock(componentData: bigint): number[] {\n const output = new Array<number>(16);\n\n const c0 = Number(componentData & 0xFFn);\n const c1 = Number((componentData >> 8n) & 0xFFn);\n\n // Build component palette\n const components = c0 > c1 ? [\n c0,\n c1,\n interpolateByteSeventh(c0, c1, 1),\n interpolateByteSeventh(c0, c1, 2),\n interpolateByteSeventh(c0, c1, 3),\n interpolateByteSeventh(c0, c1, 4),\n interpolateByteSeventh(c0, c1, 5),\n interpolateByteSeventh(c0, c1, 6)\n ] : [\n c0,\n c1,\n interpolateByteFifth(c0, c1, 1),\n interpolateByteFifth(c0, c1, 2),\n interpolateByteFifth(c0, c1, 3),\n interpolateByteFifth(c0, c1, 4),\n 0,\n 255\n ];\n\n // Decode indices (3 bits per pixel, 48 bits total starting at bit 16)\n for (let i = 0; i < 16; i++) {\n const bitOffset = 16 + i * 3;\n const index = Number((componentData >> BigInt(bitOffset)) & 0x7n);\n output[i] = components[index];\n }\n\n return output;\n}\n\nexport function decodeBC4(data: DataView, width: number, height: number, channel: 'r' | 'g' | 'b' | 'a' = 'r'): Uint8Array {\n const rgba = new Uint8Array(width * height * 4);\n const blocksX = Math.ceil(width / 4);\n const blocksY = Math.ceil(height / 4);\n\n const channelMap = { r: 0, g: 1, b: 2, a: 3 };\n const outputChannel = channelMap[channel];\n\n let offset = 0;\n for (let by = 0; by < blocksY; by++) {\n for (let bx = 0; bx < blocksX; bx++) {\n const componentBlock = data.getBigUint64(offset, true);\n const components = decodeComponentBlock(componentBlock);\n\n // Decode 4x4 block\n for (let y = 0; y < 4; y++) {\n for (let x = 0; x < 4; x++) {\n const px = bx * 4 + x;\n const py = by * 4 + y;\n\n if (px < width && py < height) {\n const i = y * 4 + x;\n const dstIdx = (py * width + px) * 4;\n\n // Initialize to default\n rgba[dstIdx] = 0;\n rgba[dstIdx + 1] = 0;\n rgba[dstIdx + 2] = 0;\n rgba[dstIdx + 3] = 255;\n\n // Set the decoded channel\n rgba[dstIdx + outputChannel] = components[i];\n }\n }\n }\n\n offset += 8;\n }\n }\n\n return rgba;\n}\n", "/**\n * BC5 Decoder - Two channel compression (typically for normal maps)\n * Source: https://github.com/Nominom/BCnEncoder.NET\n */\n\nimport { interpolateByteFifth, interpolateByteSeventh } from './utils';\n\nfunction decodeComponentBlock(componentData: bigint): number[] {\n const output = new Array<number>(16);\n\n const c0 = Number(componentData & 0xFFn);\n const c1 = Number((componentData >> 8n) & 0xFFn);\n\n // Build component palette\n const components = c0 > c1 ? [\n c0,\n c1,\n interpolateByteSeventh(c0, c1, 1),\n interpolateByteSeventh(c0, c1, 2),\n interpolateByteSeventh(c0, c1, 3),\n interpolateByteSeventh(c0, c1, 4),\n interpolateByteSeventh(c0, c1, 5),\n interpolateByteSeventh(c0, c1, 6)\n ] : [\n c0,\n c1,\n interpolateByteFifth(c0, c1, 1),\n interpolateByteFifth(c0, c1, 2),\n interpolateByteFifth(c0, c1, 3),\n interpolateByteFifth(c0, c1, 4),\n 0,\n 255\n ];\n\n // Decode indices (3 bits per pixel, 48 bits total starting at bit 16)\n for (let i = 0; i < 16; i++) {\n const bitOffset = 16 + i * 3;\n const index = Number((componentData >> BigInt(bitOffset)) & 0x7n);\n output[i] = components[index];\n }\n\n return output;\n}\n\nexport function decodeBC5(\n data: DataView, \n width: number, \n height: number,\n channel1: 'r' | 'g' | 'b' | 'a' = 'r',\n channel2: 'r' | 'g' | 'b' | 'a' = 'g'\n): Uint8Array {\n const rgba = new Uint8Array(width * height * 4);\n const blocksX = Math.ceil(width / 4);\n const blocksY = Math.ceil(height / 4);\n\n const channelMap = { r: 0, g: 1, b: 2, a: 3 };\n const outputChannel1 = channelMap[channel1];\n const outputChannel2 = channelMap[channel2];\n\n let offset = 0;\n for (let by = 0; by < blocksY; by++) {\n for (let bx = 0; bx < blocksX; bx++) {\n // Read red channel block\n const redBlock = data.getBigUint64(offset, true);\n const reds = decodeComponentBlock(redBlock);\n\n // Read green channel block\n const greenBlock = data.getBigUint64(offset + 8, true);\n const greens = decodeComponentBlock(greenBlock);\n\n // Decode 4x4 block\n for (let y = 0; y < 4; y++) {\n for (let x = 0; x < 4; x++) {\n const px = bx * 4 + x;\n const py = by * 4 + y;\n\n if (px < width && py < height) {\n const i = y * 4 + x;\n const dstIdx = (py * width + px) * 4;\n\n // Initialize to default\n rgba[dstIdx] = 0;\n rgba[dstIdx + 1] = 0;\n rgba[dstIdx + 2] = 0;\n rgba[dstIdx + 3] = 255;\n\n // Set the decoded channels\n rgba[dstIdx + outputChannel1] = reds[i];\n rgba[dstIdx + outputChannel2] = greens[i];\n }\n }\n }\n\n offset += 16;\n }\n }\n\n return rgba;\n}\n", "/**\n * BC7 Decoder - Direct port from BCnEnc.Net\n * Source: https://github.com/Nominom/BCnEncoder.NET\n */\n\nimport { ColorRgba32 } from './utils';\n\n// ByteHelper utilities\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nclass ByteHelper {\n static extract(source: bigint, index: number, bitCount: number): number {\n const mask = (1n << BigInt(bitCount)) - 1n;\n return Number((source >> BigInt(index)) & mask);\n }\n\n static extractFrom128(low: bigint, high: bigint, index: number, bitCount: number): number {\n // Extract from low\n if (index + bitCount <= 64) {\n return ByteHelper.extract(low, index, bitCount);\n }\n\n // Extract from high\n if (index >= 64) {\n return ByteHelper.extract(high, index - 64, bitCount);\n }\n\n // Handle boundary case\n const lowBitCount = 64 - index;\n const highBitCount = bitCount - lowBitCount;\n\n const lowValue = ByteHelper.extract(low, index, lowBitCount);\n const highValue = ByteHelper.extract(high, 0, highBitCount);\n \n return lowValue | (highValue << lowBitCount);\n }\n\n static extract1(source: bigint, index: number): number {\n return Number((source >> BigInt(index)) & 1n);\n }\n\n static extract2(source: bigint, index: number): number {\n return Number((source >> BigInt(index)) & 3n);\n }\n\n static extract4(source: bigint, index: number): number {\n return Number((source >> BigInt(index)) & 15n);\n }\n\n static extract6(source: bigint, index: number): number {\n return Number((source >> BigInt(index)) & 63n);\n }\n}\n\n// Interpolation weights\nconst COLOR_WEIGHTS_2 = [0, 21, 43, 64];\nconst COLOR_WEIGHTS_3 = [0, 9, 18, 27, 37, 46, 55, 64];\nconst COLOR_WEIGHTS_4 = [0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64];\n\nfunction interpolateByte(e0: number, e1: number, index: number, indexPrecision: number): number {\n if (indexPrecision === 0) return e0;\n \n const weights = indexPrecision === 2 ? COLOR_WEIGHTS_2 :\n indexPrecision === 3 ? COLOR_WEIGHTS_3 :\n COLOR_WEIGHTS_4;\n \n const w = weights[index];\n return ((64 - w) * e0 + w * e1 + 32) >> 6;\n}\n\n// Partition tables (complete 64 patterns)\nconst SUBSETS_2_PARTITION_TABLE = [\n [0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1],[0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1],\n [0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1],[0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1],\n [0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1],[0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1],\n [0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1],[0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1],\n [0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1],[0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1],\n [0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1],[0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1],\n [0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1],[0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1],\n [0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],\n [0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1],[0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0],\n [0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0],[0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0],\n [0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0],[0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0],\n [0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0],[0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1],\n [0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0],[0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0],\n [0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0],[0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0],\n [0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0],[0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0],\n [0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0],[0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0],\n [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1],[0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1],\n [0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0],[0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0],\n [0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0],[0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0],\n [0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1],[0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1],\n [0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0],[0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0],\n [0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0],[0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0],\n [0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0],[0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1],\n [0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1],[0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0],\n [0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0],[0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0],\n [0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0],[0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0],\n [0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1],[0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1],\n [0,1,1,0,0,0,1,1,1,0,0,1,1,1,0,0],[0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0],\n [0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,1],[0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1],\n [0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1],[0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1],\n [0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1],[0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0],\n [0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0],[0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1]\n];\n\nconst SUBSETS_3_PARTITION_TABLE = [\n [0,0,1,1,0,0,1,1,0,2,2,1,2,2,2,2],[0,0,0,1,0,0,1,1,2,2,1,1,2,2,2,1],\n [0,0,0,0,2,0,0,1,2,2,1,1,2,2,1,1],[0,2,2,2,0,0,2,2,0,0,1,1,0,1,1,1],\n [0,0,0,0,0,0,0,0,1,1,2,2,1,1,2,2],[0,0,1,1,0,0,1,1,0,0,2,2,0,0,2,2],\n [0,0,2,2,0,0,2,2,1,1,1,1,1,1,1,1],[0,0,1,1,0,0,1,1,2,2,1,1,2,2,1,1],\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2],[0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2],\n [0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2],[0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2],\n [0,1,1,2,0,1,1,2,0,1,1,2,0,1,1,2],[0,1,2,2,0,1,2,2,0,1,2,2,0,1,2,2],\n [0,0,1,1,0,1,1,2,1,1,2,2,1,2,2,2],[0,0,1,1,2,0,0,1,2,2,0,0,2,2,2,0],\n [0,0,0,1,0,0,1,1,0,1,1,2,1,1,2,2],[0,1,1,1,0,0,1,1,2,0,0,1,2,2,0,0],\n [0,0,0,0,1,1,2,2,1,1,2,2,1,1,2,2],[0,0,2,2,0,0,2,2,0,0,2,2,1,1,1,1],\n [0,1,1,1,0,1,1,1,0,2,2,2,0,2,2,2],[0,0,0,1,0,0,0,1,2,2,2,1,2,2,2,1],\n [0,0,0,0,0,0,1,1,0,1,2,2,0,1,2,2],[0,0,0,0,1,1,0,0,2,2,1,0,2,2,1,0],\n [0,1,2,2,0,1,2,2,0,0,1,1,0,0,0,0],[0,0,1,2,0,0,1,2,1,1,2,2,2,2,2,2],\n [0,1,1,0,1,2,2,1,1,2,2,1,0,1,1,0],[0,0,0,0,0,1,1,0,1,2,2,1,1,2,2,1],\n [0,0,2,2,1,1,0,2,1,1,0,2,0,0,2,2],[0,1,1,0,0,1,1,0,2,0,0,2,2,2,2,2],\n [0,0,1,1,0,1,2,2,0,1,2,2,0,0,1,1],[0,0,0,0,2,0,0,0,2,2,1,1,2,2,2,1],\n [0,0,0,0,0,0,0,2,1,1,2,2,1,2,2,2],[0,2,2,2,0,0,2,2,0,0,1,2,0,0,1,1],\n [0,0,1,1,0,0,1,2,0,0,2,2,0,2,2,2],[0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0],\n [0,0,0,0,1,1,1,1,2,2,2,2,0,0,0,0],[0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0],\n [0,1,2,0,2,0,1,2,1,2,0,1,0,1,2,0],[0,0,1,1,2,2,0,0,1,1,2,2,0,0,1,1],\n [0,0,1,1,1,1,2,2,2,2,0,0,0,0,1,1],[0,1,0,1,0,1,0,1,2,2,2,2,2,2,2,2],\n [0,0,0,0,0,0,0,0,2,1,2,1,2,1,2,1],[0,0,2,2,1,1,2,2,0,0,2,2,1,1,2,2],\n [0,0,2,2,0,0,1,1,0,0,2,2,0,0,1,1],[0,2,2,0,1,2,2,1,0,2,2,0,1,2,2,1],\n [0,1,0,1,2,2,2,2,2,2,2,2,0,1,0,1],[0,0,0,0,2,1,2,1,2,1,2,1,2,1,2,1],\n [0,1,0,1,0,1,0,1,0,1,0,1,2,2,2,2],[0,2,2,2,0,1,1,1,0,2,2,2,0,1,1,1],\n [0,0,0,2,1,1,1,2,0,0,0,2,1,1,1,2],[0,0,0,0,2,1,1,2,2,1,1,2,2,1,1,2],\n [0,2,2,2,0,1,1,1,0,1,1,1,0,2,2,2],[0,0,0,2,1,1,1,2,1,1,1,2,0,0,0,2],\n [0,1,1,0,0,1,1,0,0,1,1,0,2,2,2,2],[0,0,0,0,0,0,0,0,2,1,1,2,2,1,1,2],\n [0,1,1,0,0,1,1,0,2,2,2,2,2,2,2,2],[0,0,2,2,0,0,1,1,0,0,1,1,0,0,2,2],\n [0,0,2,2,1,1,2,2,1,1,2,2,0,0,2,2],[0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2],\n [0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,1],[0,2,2,2,1,2,2,2,0,2,2,2,1,2,2,2],\n [0,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2],[0,1,1,1,2,0,1,1,2,2,0,1,2,2,2,0]\n];\n\nconst SUBSETS_2_ANCHOR_INDICES = [\n 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,\n 15,2,8,2,2,8,8,15,2,8,2,2,8,8,2,2,\n 15,15,6,8,2,8,15,15,2,8,2,2,2,15,15,6,\n 6,2,6,8,15,15,2,2,15,15,15,15,15,2,2,15\n];\n\nconst SUBSETS_3_ANCHOR_INDICES_2 = [\n 3,3,15,15,8,3,15,15,8,8,6,6,6,5,3,3,\n 3,3,8,15,3,3,6,10,5,8,8,6,8,5,15,15,\n 8,15,3,5,6,10,8,15,15,3,15,5,15,15,15,15,\n 3,15,5,5,5,8,5,10,5,10,8,13,15,12,3,3\n];\n\nconst SUBSETS_3_ANCHOR_INDICES_3 = [\n 15,8,8,3,15,15,3,8,15,15,15,15,15,15,15,8,\n 15,8,15,3,15,8,15,8,3,15,6,10,15,15,10,8,\n 15,3,15,10,10,8,9,10,6,15,8,15,3,6,6,8,\n 15,3,15,15,15,15,15,15,15,15,15,15,3,15,15,8\n];\n\nclass Bc7Block {\n private lowBits: bigint;\n private highBits: bigint;\n\n constructor(data: Uint8Array) {\n // Read 16 bytes as two 64-bit values\n const view = new DataView(data.buffer, data.byteOffset, 16);\n this.lowBits = view.getBigUint64(0, true);\n this.highBits = view.getBigUint64(8, true);\n }\n\n private getType(): number {\n for (let i = 0; i < 8; i++) {\n const mask = 1n << BigInt(i);\n if ((this.lowBits & mask) === mask) {\n return i;\n }\n }\n return 8; // Reserved\n }\n\n private getNumSubsets(type: number): number {\n if (type === 0 || type === 2) return 3;\n if (type === 1 || type === 3 || type === 7) return 2;\n return 1;\n }\n\n private getPartitionSetId(type: number): number {\n switch (type) {\n case 0: return ByteHelper.extract4(this.lowBits, 1);\n case 1: return ByteHelper.extract6(this.lowBits, 2);\n case 2: return ByteHelper.extract6(this.lowBits, 3);\n case 3: return ByteHelper.extract6(this.lowBits, 4);\n case 7: return ByteHelper.extract6(this.lowBits, 8);\n default: return 0;\n }\n }\n\n private getRotationBits(type: number): number {\n if (type === 4) return ByteHelper.extract2(this.lowBits, 5);\n if (type === 5) return ByteHelper.extract2(this.lowBits, 6);\n return 0;\n }\n\n private getColorComponentPrecision(type: number): number {\n const precisions = [5, 7, 5, 8, 5, 7, 8, 6];\n return precisions[type] || 0;\n }\n\n private getAlphaComponentPrecision(type: number): number {\n if (type === 4) return 6;\n if (type === 5 || type === 6) return 8;\n if (type === 7) return 6;\n return 0;\n }\n\n private getType4IndexMode(): number {\n return ByteHelper.extract1(this.lowBits, 7);\n }\n\n private getColorIndexBitCount(type: number): number {\n if (type === 0 || type === 1) return 3;\n if (type === 2 || type === 3 || type === 5 || type === 7) return 2;\n if (type === 4) {\n const indexMode = this.getType4IndexMode();\n return indexMode === 0 ? 2 : 3;\n }\n if (type === 6) return 4;\n return 0;\n }\n\n private getAlphaIndexBitCount(type: number): number {\n if (type === 4) {\n const indexMode = this.getType4IndexMode();\n return indexMode === 0 ? 3 : 2;\n }\n if (type === 5 || type === 7) return 2;\n if (type === 6) return 4;\n return 0;\n }\n\n private extractRawEndpoints(type: number, numSubsets: number): ColorRgba32[] {\n const endpoints: ColorRgba32[] = Array(numSubsets * 2).fill(null).map(() => ({ r: 0, g: 0, b: 0, a: 0 }));\n\n switch (type) {\n case 0:\n for (let i = 0; i < 6; i++) {\n endpoints[i].r = ByteHelper.extractFrom128(this.lowBits, this.highBits, 5 + i * 4, 4);\n endpoints[i].g = ByteHelper.extractFrom128(this.lowBits, this.highBits, 29 + i * 4, 4);\n endpoints[i].b = ByteHelper.extractFrom128(this.lowBits, this.highBits, 53 + i * 4, 4);\n }\n break;\n case 1:\n for (let i = 0; i < 4; i++) {\n endpoints[i].r = ByteHelper.extractFrom128(this.lowBits, this.highBits, 8 + i * 6, 6);\n endpoints[i].g = ByteHelper.extractFrom128(this.lowBits, this.highBits, 32 + i * 6, 6);\n endpoints[i].b = ByteHelper.extractFrom128(this.lowBits, this.highBits, 56 + i * 6, 6);\n }\n break;\n case 2:\n for (let i = 0; i < 6; i++) {\n endpoints[i].r = ByteHelper.extractFrom128(this.lowBits, this.highBits, 9 + i * 5, 5);\n endpoints[i].g = ByteHelper.extractFrom128(this.lowBits, this.highBits, 39 + i * 5, 5);\n endpoints[i].b = ByteHelper.extractFrom128(this.lowBits, this.highBits, 69 + i * 5, 5);\n }\n break;\n case 3:\n for (let i = 0; i < 4; i++) {\n endpoints[i].r = ByteHelper.extractFrom128(this.lowBits, this.highBits, 10 + i * 7, 7);\n endpoints[i].g = ByteHelper.extractFrom128(this.lowBits, this.highBits, 38 + i * 7, 7);\n endpoints[i].b = ByteHelper.extractFrom128(this.lowBits, this.highBits, 66 + i * 7, 7);\n }\n break;\n case 4:\n endpoints[0].r = ByteHelper.extractFrom128(this.lowBits, this.highBits, 8, 5);\n endpoints[1].r = ByteHelper.extractFrom128(this.lowBits, this.highBits, 13, 5);\n endpoints[0].g = ByteHelper.extractFrom128(this.lowBits, this.highBits, 18, 5);\n endpoints[1].g = ByteHelper.extractFrom128(this.lowBits, this.highBits, 23, 5);\n endpoints[0].b = ByteHelper.extractFrom128(this.lowBits, this.highBits, 28, 5);\n endpoints[1].b = ByteHelper.extractFrom128(this.lowBits, this.highBits, 33, 5);\n endpoints[0].a = ByteHelper.extractFrom128(this.lowBits, this.highBits, 38, 6);\n endpoints[1].a = ByteHelper.extractFrom128(this.lowBits, this.highBits, 44, 6);\n break;\n case 5:\n endpoints[0].r = ByteHelper.extractFrom128(this.lowBits, this.highBits, 8, 7);\n endpoints[1].r = ByteHelper.extractFrom128(this.lowBits, this.highBits, 15, 7);\n endpoints[0].g = ByteHelper.extractFrom128(this.lowBits, this.highBits, 22, 7);\n endpoints[1].g = ByteHelper.extractFrom128(this.lowBits, this.highBits, 29, 7);\n endpoints[0].b = ByteHelper.extractFrom128(this.lowBits, this.highBits, 36, 7);\n endpoints[1].b = ByteHelper.extractFrom128(this.lowBits, this.highBits, 43, 7);\n endpoints[0].a = ByteHelper.extractFrom128(this.lowBits, this.highBits, 50, 8);\n endpoints[1].a = ByteHelper.extractFrom128(this.lowBits, this.highBits, 58, 8);\n break;\n case 6:\n endpoints[0].r = ByteHelper.extractFrom128(this.lowBits, this.highBits, 7, 7);\n endpoints[1].r = ByteHelper.extractFrom128(this.lowBits, this.highBits, 14, 7);\n endpoints[0].g = ByteHelper.extractFrom128(this.lowBits, this.highBits, 21, 7);\n endpoints[1].g = ByteHelper.extractFrom128(this.lowBits, this.highBits, 28, 7);\n endpoints[0].b = ByteHelper.extractFrom128(this.lowBits, this.highBits, 35, 7);\n endpoints[1].b = ByteHelper.extractFrom128(this.lowBits, this.highBits, 42, 7);\n endpoints[0].a = ByteHelper.extractFrom128(this.lowBits, this.highBits, 49, 7);\n endpoints[1].a = ByteHelper.extractFrom128(this.lowBits, this.highBits, 56, 7);\n break;\n case 7:\n for (let i = 0; i < 4; i++) {\n endpoints[i].r = ByteHelper.extractFrom128(this.lowBits, this.highBits, 14 + i * 5, 5);\n endpoints[i].g = ByteHelper.extractFrom128(this.lowBits, this.highBits, 34 + i * 5, 5);\n endpoints[i].b = ByteHelper.extractFrom128(this.lowBits, this.highBits, 54 + i * 5, 5);\n endpoints[i].a = ByteHelper.extractFrom128(this.lowBits, this.highBits, 74 + i * 5, 5);\n }\n break;\n }\n\n return endpoints;\n }\n\n private extractPBits(type: number, _numSubsets: number): number[] {\n switch (type) {\n case 0:\n return [\n ByteHelper.extract1(this.highBits, 77 - 64),\n ByteHelper.extract1(this.highBits, 78 - 64),\n ByteHelper.extract1(this.highBits, 79 - 64),\n ByteHelper.extract1(this.highBits, 80 - 64),\n ByteHelper.extract1(this.highBits, 81 - 64),\n ByteHelper.extract1(this.highBits, 82 - 64)\n ];\n case 1:\n return [\n ByteHelper.extract1(this.highBits, 80 - 64),\n ByteHelper.extract1(this.highBits, 81 - 64)\n ];\n case 3:\n return [\n ByteHelper.extract1(this.highBits, 94 - 64),\n ByteHelper.extract1(this.highBits, 95 - 64),\n ByteHelper.extract1(this.highBits, 96 - 64),\n ByteHelper.extract1(this.highBits, 97 - 64)\n ];\n case 6:\n return [\n ByteHelper.extract1(this.lowBits, 63),\n ByteHelper.extract1(this.highBits, 0)\n ];\n case 7:\n return [\n ByteHelper.extract1(this.highBits, 94 - 64),\n ByteHelper.extract1(this.highBits, 95 - 64),\n ByteHelper.extract1(this.highBits, 96 - 64),\n ByteHelper.extract1(this.highBits, 97 - 64)\n ];\n default:\n return [];\n }\n }\n\n private hasPBits(type: number): boolean {\n return type === 0 || type === 1 || type === 3 || type === 6 || type === 7;\n }\n\n private hasAlpha(type: number): boolean {\n return type === 4 || type === 5 || type === 6 || type === 7;\n }\n\n private finalizeEndpoints(endpoints: ColorRgba32[], type: number): void {\n const hasPBits = this.hasPBits(type);\n \n if (hasPBits) {\n const pBits = this.extractPBits(type, endpoints.length);\n \n // Left shift by 1\n for (const ep of endpoints) {\n ep.r <<= 1;\n ep.g <<= 1;\n ep.b <<= 1;\n ep.a <<= 1;\n }\n\n // Apply P-bits\n if (type === 1) {\n // Shared P-bits for Type 1\n endpoints[0].r |= pBits[0]; endpoints[0].g |= pBits[0]; endpoints[0].b |= pBits[0];\n endpoints[1].r |= pBits[0]; endpoints[1].g |= pBits[0]; endpoints[1].b |= pBits[0];\n endpoints[2].r |= pBits[1]; endpoints[2].g |= pBits[1]; endpoints[2].b |= pBits[1];\n endpoints[3].r |= pBits[1]; endpoints[3].g |= pBits[1]; endpoints[3].b |= pBits[1];\n } else {\n for (let i = 0; i < endpoints.length; i++) {\n endpoints[i].r |= pBits[i];\n endpoints[i].g |= pBits[i];\n endpoints[i].b |= pBits[i];\n if (this.hasAlpha(type)) {\n endpoints[i].a |= pBits[i];\n }\n }\n }\n }\n\n const colorPrec = this.getColorComponentPrecision(type);\n const alphaPrec = this.getAlphaComponentPrecision(type);\n\n for (const ep of endpoints) {\n // Left shift to place MSB in bit 7\n ep.r = (ep.r << (8 - colorPrec)) | (ep.r >> (colorPrec - (8 - colorPrec)));\n ep.g = (ep.g << (8 - colorPrec)) | (ep.g >> (colorPrec - (8 - colorPrec)));\n ep.b = (ep.b << (8 - colorPrec)) | (ep.b >> (colorPrec - (8 - colorPrec)));\n ep.a = alphaPrec > 0 \n ? (ep.a << (8 - alphaPrec)) | (ep.a >> (alphaPrec - (8 - alphaPrec)))\n : 255;\n }\n\n if (!this.hasAlpha(type)) {\n for (const ep of endpoints) {\n ep.a = 255;\n }\n }\n }\n\n private getPartitionIndex(numSubsets: number, partitionSetId: number, pixelIndex: number): number {\n if (numSubsets === 1) return 0;\n if (numSubsets === 2) return SUBSETS_2_PARTITION_TABLE[partitionSetId][pixelIndex];\n return SUBSETS_3_PARTITION_TABLE[partitionSetId][pixelIndex];\n }\n\n private getIndexBegin(type: number, bitCount: number, isAlpha: boolean): number {\n switch (type) {\n case 0: return 83;\n case 1: return 82;\n case 2: return 99;\n case 3: return 98;\n case 4: return bitCount === 2 ? 50 : 81;\n case 5: return isAlpha ? 97 : 66;\n case 6: return 65;\n case 7: return 98;\n default: return 0;\n }\n }\n\n private getIndexBitCount(numSubsets: number, partitionIndex: number, bitCount: number, pixelIndex: number): number {\n if (pixelIndex === 0) return bitCount - 1;\n \n if (numSubsets === 2) {\n const anchorIndex = SUBSETS_2_ANCHOR_INDICES[partitionIndex];\n if (pixelIndex === anchorIndex) return bitCount - 1;\n } else if (numSubsets === 3) {\n const anchor2 = SUBSETS_3_ANCHOR_INDICES_2[partitionIndex];\n const anchor3 = SUBSETS_3_ANCHOR_INDICES_3[partitionIndex];\n if (pixelIndex === anchor2 || pixelIndex === anchor3) return bitCount - 1;\n }\n \n return bitCount;\n }\n\n private getIndexOffset(type: number, numSubsets: number, partitionIndex: number, bitCount: number, pixelIndex: number): number {\n if (pixelIndex === 0) return 0;\n \n if (numSubsets === 1) {\n return bitCount * pixelIndex - 1;\n }\n\n if (numSubsets === 2) {\n const anchorIndex = SUBSETS_2_ANCHOR_INDICES[partitionIndex];\n if (pixelIndex <= anchorIndex) {\n return bitCount * pixelIndex - 1;\n } else {\n return bitCount * pixelIndex - 2;\n }\n }\n\n if (numSubsets === 3) {\n const anchor2 = SUBSETS_3_ANCHOR_INDICES_2[partitionIndex];\n const anchor3 = SUBSETS_3_ANCHOR_INDICES_3[partitionIndex];\n\n if (pixelIndex <= anchor2 && pixelIndex <= anchor3) {\n return bitCount * pixelIndex - 1;\n } else if (pixelIndex > anchor2 && pixelIndex > anchor3) {\n return bitCount * pixelIndex - 3;\n } else {\n return bitCount * pixelIndex - 2;\n }\n }\n\n return 0;\n }\n\n private getColorIndex(type: number, numSubsets: number, partitionIndex: number, bitCount: number, pixelIndex: number): number {\n const indexOffset = this.getIndexOffset(type, numSubsets, partitionIndex, bitCount, pixelIndex);\n const indexBitCount = this.getIndexBitCount(numSubsets, partitionIndex, bitCount, pixelIndex);\n const indexBegin = this.getIndexBegin(type, bitCount, false);\n return ByteHelper.extractFrom128(this.lowBits, this.highBits, indexBegin + indexOffset, indexBitCount);\n }\n\n private getAlphaIndex(type: number, numSubsets: number, partitionIndex: number, bitCount: number, pixelIndex: number): number {\n if (bitCount === 0) return 0;\n const indexOffset = this.getIndexOffset(type, numSubsets, partitionIndex, bitCount, pixelIndex);\n const indexBitCount = this.getIndexBitCount(numSubsets, partitionIndex, bitCount, pixelIndex);\n const indexBegin = this.getIndexBegin(type, bitCount, true);\n return ByteHelper.extractFrom128(this.lowBits, this.highBits, indexBegin + indexOffset, indexBitCount);\n }\n\n private swapChannels(color: ColorRgba32, rotation: number): ColorRgba32 {\n switch (rotation) {\n case 0: return color;\n case 1: return { r: color.a, g: color.g, b: color.b, a: color.r };\n case 2: return { r: color.r, g: color.a, b: color.b, a: color.g };\n case 3: return { r: color.r, g: color.g, b: color.a, a: color.b };\n default: return color;\n }\n }\n\n decode(): Uint8Array {\n const output = new Uint8Array(16 * 4);\n const type = this.getType();\n\n if (type === 8) {\n // Reserved type - return error color (magenta)\n for (let i = 0; i < 16; i++) {\n output[i * 4] = 255;\n output[i * 4 + 1] = 0;\n output[i * 4 + 2] = 255;\n output[i * 4 + 3] = 255;\n }\n return output;\n }\n\n const numSubsets = this.getNumSubsets(type);\n const partitionSetId = this.getPartitionSetId(type);\n const rotation = this.getRotationBits(type);\n\n const endpoints = this.extractRawEndpoints(type, numSubsets);\n this.finalizeEndpoints(endpoints, type);\n\n const colorBitCount = this.getColorIndexBitCount(type);\n const alphaBitCount = this.getAlphaIndexBitCount(type);\n\n for (let i = 0; i < 16; i++) {\n const subsetIndex = this.getPartitionIndex(numSubsets, partitionSetId, i);\n const ep0 = endpoints[2 * subsetIndex];\n const ep1 = endpoints[2 * subsetIndex + 1];\n\n const colorIndex = this.getColorIndex(type, numSubsets, partitionSetId, colorBitCount, i);\n const alphaIndex = this.getAlphaIndex(type, numSubsets, partitionSetId, alphaBitCount, i);\n\n let color: ColorRgba32 = {\n r: interpolateByte(ep0.r, ep1.r, colorIndex, colorBitCount),\n g: interpolateByte(ep0.g, ep1.g, colorIndex, colorBitCount),\n b: interpolateByte(ep0.b, ep1.b, colorIndex, colorBitCount),\n a: interpolateByte(ep0.a, ep1.a, alphaIndex, alphaBitCount || colorBitCount)\n };\n\n if (rotation > 0) {\n color = this.swapChannels(color, rotation);\n }\n\n output[i * 4] = color.r;\n output[i * 4 + 1] = color.g;\n output[i * 4 + 2] = color.b;\n output[i * 4 + 3] = color.a;\n }\n\n return output;\n }\n}\n\nexport function decodeBC7(imageData: DataView, width: number, height: number): Uint8Array {\n const rgba = new Uint8Array(width * height * 4);\n const blocksX = Math.ceil(width / 4);\n const blocksY = Math.ceil(height / 4);\n\n let offset = 0;\n for (let by = 0; by < blocksY; by++) {\n for (let bx = 0; bx < blocksX; bx++) {\n const blockData = new Uint8Array(16);\n for (let i = 0; i < 16; i++) {\n blockData[i] = imageData.getUint8(offset + i);\n }\n \n const block = new Bc7Block(blockData);\n const decodedBlock = block.decode();\n\n for (let y = 0; y < 4; y++) {\n for (let x = 0; x < 4; x++) {\n const px = bx * 4 + x;\n const py = by * 4 + y;\n \n if (px < width && py < height) {\n const srcIdx = (y * 4 + x) * 4;\n const dstIdx = (py * width + px) * 4;\n rgba[dstIdx] = decodedBlock[srcIdx];\n rgba[dstIdx + 1] = decodedBlock[srcIdx + 1];\n rgba[dstIdx + 2] = decodedBlock[srcIdx + 2];\n rgba[dstIdx + 3] = decodedBlock[srcIdx + 3];\n }\n }\n }\n\n offset += 16;\n }\n }\n\n return rgba;\n}\n"],
|
|
5
|
+
"mappings": "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AE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AACtE;AAEA,IAAM,4BAA4B;AAAA,EAC9B,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAClE,C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",
|
|
6
|
+
"names": ["decodeComponentBlock"]
|
|
7
|
+
}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for BC decoders
|
|
3
|
+
* Source: https://github.com/Nominom/BCnEncoder.NET
|
|
4
|
+
*/
|
|
5
|
+
export interface ColorRgba32 {
|
|
6
|
+
r: number;
|
|
7
|
+
g: number;
|
|
8
|
+
b: number;
|
|
9
|
+
a: number;
|
|
10
|
+
}
|
|
11
|
+
export interface ColorRgb24 {
|
|
12
|
+
r: number;
|
|
13
|
+
g: number;
|
|
14
|
+
b: number;
|
|
15
|
+
}
|
|
16
|
+
export declare class ColorRgb565 {
|
|
17
|
+
data: number;
|
|
18
|
+
constructor(r?: number, g?: number, b?: number);
|
|
19
|
+
toColorRgb24(): ColorRgb24;
|
|
20
|
+
}
|
|
21
|
+
export declare function interpolateHalf(c0: ColorRgb24, c1: ColorRgb24): ColorRgb24;
|
|
22
|
+
export declare function interpolateThird(c0: ColorRgb24, c1: ColorRgb24, step: number): ColorRgb24;
|
|
23
|
+
export declare function interpolateByteFifth(e0: number, e1: number, step: number): number;
|
|
24
|
+
export declare function interpolateByteSeventh(e0: number, e1: number, step: number): number;
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bis-toolkit/bcn",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Block Compression (BC1-BC5, BC7) texture decoders",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "npm run build:types && npm run build:bundle",
|
|
22
|
+
"build:types": "tsc --declaration --emitDeclarationOnly --outDir dist",
|
|
23
|
+
"build:bundle": "node esbuild.config.js",
|
|
24
|
+
"prepublishOnly": "npm run build",
|
|
25
|
+
"watch": "tsc --watch",
|
|
26
|
+
"lint": "eslint",
|
|
27
|
+
"lint:fix": "eslint --fix"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"bc1",
|
|
31
|
+
"bc2",
|
|
32
|
+
"bc3",
|
|
33
|
+
"bc4",
|
|
34
|
+
"bc5",
|
|
35
|
+
"bc7",
|
|
36
|
+
"dxt1",
|
|
37
|
+
"dxt3",
|
|
38
|
+
"dxt5",
|
|
39
|
+
"texture",
|
|
40
|
+
"decoder"
|
|
41
|
+
],
|
|
42
|
+
"author": "",
|
|
43
|
+
"license": "GPL-3.0-or-later",
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"typescript": "^5.9.3",
|
|
46
|
+
"esbuild": "^0.27.2"
|
|
47
|
+
}
|
|
48
|
+
}
|