UNPKG

three

Version:

JavaScript 3D library

101 lines (81 loc) 2.32 kB
import { Texture } from '../../textures/Texture.js'; import { LinearFilter, ClampToEdgeWrapping } from '../../constants.js'; /** * This special type of texture is intended for compute shaders. * It can be used to compute the data of a texture with a compute shader. * * Note: This type of texture can only be used with `WebGPURenderer` * and a WebGPU backend. * * @augments Texture */ class Storage3DTexture extends Texture { /** * Constructs a new storage texture. * * @param {number} [width=1] - The storage texture's width. * @param {number} [height=1] - The storage texture's height. * @param {number} [depth=1] - The storage texture's depth. */ constructor( width = 1, height = 1, depth = 1 ) { super(); //inherited from texture. Must be false for 3DTexture this.isArrayTexture = false; /** * The image object which just represents the texture's dimension. * * @type {{width: number, height: number, depth: number}} */ this.image = { width, height, depth }; /** * The default `magFilter` for storage textures is `THREE.LinearFilter`. * * @type {number} */ this.magFilter = LinearFilter; /** * The default `minFilter` for storage textures is `THREE.LinearFilter`. * * @type {number} */ this.minFilter = LinearFilter; /** * This defines how the texture is wrapped in the depth direction and corresponds to * *W* in UVW mapping. * * @type {number} */ this.wrapR = ClampToEdgeWrapping; /** * This flag can be used for type testing. * * @type {boolean} * @readonly * @default true */ this.isStorageTexture = true; /** * Indicates whether this texture is a 3D texture. * * @type {boolean} * */ this.is3DTexture = true; } /** * Sets the size of the storage 3d texture. * * @param {number} width - The new width of the storage texture. * @param {number} height - The new height of the storage texture. * @param {number} depth - The new depth of the storage texture. */ setSize( width, height, depth ) { if ( this.image.width !== width || this.image.height !== height || this.image.depth !== depth ) { this.image.width = width; this.image.height = height; this.image.depth = depth; this.dispose(); } } } export default Storage3DTexture;