WebGPURenderer: Support ExternalTexture with GPUTexture #31653
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Related issue:
Adds support for initializing a THREE.ExternalTexture instance with a GPUTexture created by the WebGPU renderer's own device. Provides a fast path for using textures created by other libraries (example: https://ludicon.com/sparkjs/) without extra copies.
Example:
On local testing, our
textures/uv_grid_opengl.jpgis compressed to BC7 in 0.1 ms (!) on an M1 device.The code changes required are trivial, but I'm not sure if using THREE.ExternalTexture as proposed in #31595 is semantically right — this is the opposite of a "texture created externally from the renderer context" as the JSDoc suggests... Would it make more sense to use THREE.CompressedTexture? A new THREE.InternalTexture or THREE.GPUTexture class? My (slight) preference would be to keep using THREE.ExternalTexture, but to update the documentation to say "externally from three.js" instead.