diff --git a/examples/jsm/renderers/common/Bindings.js b/examples/jsm/renderers/common/Bindings.js index 52127f7367b5ca..a0a00ac81e9db0 100644 --- a/examples/jsm/renderers/common/Bindings.js +++ b/examples/jsm/renderers/common/Bindings.js @@ -82,9 +82,7 @@ class Bindings extends DataMap { if ( binding.isSampledTexture ) { - const store = binding.store === true; - - this.textures.updateTexture( binding.texture, { store } ); + this.textures.updateTexture( binding.texture ); } else if ( binding.isStorageBuffer ) { diff --git a/examples/jsm/renderers/common/StorageTexture.js b/examples/jsm/renderers/common/StorageTexture.js new file mode 100644 index 00000000000000..1553ba66adac0d --- /dev/null +++ b/examples/jsm/renderers/common/StorageTexture.js @@ -0,0 +1,19 @@ +import { Texture, LinearFilter } from 'three'; + +class StorageTexture extends Texture { + + constructor( width = 1, height = 1 ) { + + super(); + + this.image = { width, height }; + + this.magFilter = LinearFilter; + this.minFilter = LinearFilter; + + this.isStorageTexture = true; + + } +} + +export default StorageTexture; diff --git a/examples/jsm/renderers/common/Textures.js b/examples/jsm/renderers/common/Textures.js index d612dfec1e09ef..03b464603eea49 100644 --- a/examples/jsm/renderers/common/Textures.js +++ b/examples/jsm/renderers/common/Textures.js @@ -153,9 +153,7 @@ class Textures extends DataMap { // - if ( isRenderTarget || options.store === true ) { - - //if ( options.store === true ) options.levels = 1; /* no mipmaps? */ + if ( isRenderTarget || texture.isStorageTexture === true ) { backend.createSampler( texture ); backend.createTexture( texture, options ); diff --git a/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js b/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js index 4c88726c974941..549021f9904027 100644 --- a/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +++ b/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js @@ -111,7 +111,7 @@ class WebGPUTextureUtils { let usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC; - if ( options.store === true ) { + if ( texture.isStorageTexture === true ) { usage |= GPUTextureUsage.STORAGE_BINDING; diff --git a/examples/webgpu_compute_texture.html b/examples/webgpu_compute_texture.html index b0b717fcca018b..de2df0c0fe89c0 100644 --- a/examples/webgpu_compute_texture.html +++ b/examples/webgpu_compute_texture.html @@ -31,6 +31,7 @@ import WebGPU from 'three/addons/capabilities/WebGPU.js'; import WebGPURenderer from 'three/addons/renderers/webgpu/WebGPURenderer.js'; + import StorageTexture from 'three/addons/renderers/common/StorageTexture.js'; let camera, scene, renderer; @@ -57,10 +58,7 @@ const width = 512, height = 512; - const storageTexture = new THREE.Texture(); - storageTexture.image = { width, height }; - storageTexture.magFilter = THREE.LinearFilter; - storageTexture.minFilter = THREE.LinearFilter; + const storageTexture = new StorageTexture( width, height ); // create function