gpu-curtains
Version:
gpu-curtains is a 3D WebGPU rendering engine. It can be used as a standalone 3D engine, but also includes extra classes focused on mapping 3d objects to DOM elements; It allows users to synchronize values such as position, sizing, or scale between them.
30 lines (27 loc) • 1.29 kB
JavaScript
import { WebGPUTextureUsageConstants } from '../../utils/webgpu-constants.mjs';
const textureUsages = /* @__PURE__ */ new Map([
["copySrc", WebGPUTextureUsageConstants.COPY_SRC],
["copyDst", WebGPUTextureUsageConstants.COPY_DST],
["renderAttachment", WebGPUTextureUsageConstants.RENDER_ATTACHMENT],
["storageBinding", WebGPUTextureUsageConstants.STORAGE_BINDING],
["textureBinding", WebGPUTextureUsageConstants.TEXTURE_BINDING]
]);
const getTextureUsages = (usages = []) => {
return usages.reduce((acc, v) => {
return acc | textureUsages.get(v);
}, 0);
};
const getDefaultTextureUsage = (usages = [], textureType) => {
if (usages.length) {
return getTextureUsages(usages);
}
return textureType !== "storage" ? GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT : GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST;
};
const getDefaultMediaTextureUsage = (usages = []) => {
return getDefaultTextureUsage(usages, "texture");
};
const getNumMipLevels = (...sizes) => {
const maxSize = Math.max(...sizes);
return 1 + Math.log2(maxSize) | 0;
};
export { getDefaultMediaTextureUsage, getDefaultTextureUsage, getNumMipLevels, getTextureUsages };