pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
48 lines (45 loc) • 1.79 kB
JavaScript
;
;
const blockDataMap = {
"bc1-rgba-unorm": { blockBytes: 8, blockWidth: 4, blockHeight: 4 },
"bc2-rgba-unorm": { blockBytes: 16, blockWidth: 4, blockHeight: 4 },
"bc3-rgba-unorm": { blockBytes: 16, blockWidth: 4, blockHeight: 4 },
"bc7-rgba-unorm": { blockBytes: 16, blockWidth: 4, blockHeight: 4 },
"etc1-rgb-unorm": { blockBytes: 8, blockWidth: 4, blockHeight: 4 },
"etc2-rgba8unorm": { blockBytes: 16, blockWidth: 4, blockHeight: 4 },
"astc-4x4-unorm": { blockBytes: 16, blockWidth: 4, blockHeight: 4 }
};
const defaultBlockData = { blockBytes: 4, blockWidth: 1, blockHeight: 1 };
const gpuUploadCompressedTextureResource = {
type: "compressed",
upload(source, gpuTexture, gpu) {
let mipWidth = source.pixelWidth;
let mipHeight = source.pixelHeight;
const blockData = blockDataMap[source.format] || defaultBlockData;
for (let i = 0; i < source.resource.length; i++) {
const levelBuffer = source.resource[i];
const bytesPerRow = Math.ceil(mipWidth / blockData.blockWidth) * blockData.blockBytes;
gpu.device.queue.writeTexture(
{
texture: gpuTexture,
mipLevel: i
},
levelBuffer,
{
offset: 0,
bytesPerRow
},
{
width: Math.ceil(mipWidth / blockData.blockWidth) * blockData.blockWidth,
height: Math.ceil(mipHeight / blockData.blockHeight) * blockData.blockHeight,
depthOrArrayLayers: 1
}
);
mipWidth = Math.max(mipWidth >> 1, 1);
mipHeight = Math.max(mipHeight >> 1, 1);
}
}
};
exports.blockDataMap = blockDataMap;
exports.gpuUploadCompressedTextureResource = gpuUploadCompressedTextureResource;
//# sourceMappingURL=gpuUploadCompressedTextureResource.js.map