diff --git a/examples-testing/changes.patch b/examples-testing/changes.patch index 1908b0da8..a8076204f 100644 --- a/examples-testing/changes.patch +++ b/examples-testing/changes.patch @@ -1148,19 +1148,19 @@ index f4a189bb..1cd5fb27 100644 const link = document.createElement('a'); diff --git a/examples-testing/examples/misc_exporter_gltf.ts b/examples-testing/examples/misc_exporter_gltf.ts -index fda0d4df..12e45bf4 100644 +index 323c5c49..faef7421 100644 --- a/examples-testing/examples/misc_exporter_gltf.ts +++ b/examples-testing/examples/misc_exporter_gltf.ts -@@ -6,7 +6,7 @@ import { KTX2Loader } from 'three/addons/loaders/KTX2Loader.js'; - import { MeshoptDecoder } from 'three/addons/libs/meshopt_decoder.module.js'; +@@ -7,7 +7,7 @@ import { MeshoptDecoder } from 'three/addons/libs/meshopt_decoder.module.js'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; + import * as TextureUtils from 'three/addons/utils/WebGLTextureUtils.js'; -function exportGLTF(input) { +function exportGLTF(input: THREE.Object3D | THREE.Object3D[]) { - const gltfExporter = new GLTFExporter(); + const gltfExporter = new GLTFExporter().setTextureUtils(TextureUtils); const options = { -@@ -37,7 +37,7 @@ const link = document.createElement('a'); +@@ -38,7 +38,7 @@ const link = document.createElement('a'); link.style.display = 'none'; document.body.appendChild(link); // Firefox workaround, see #6594 @@ -1169,7 +1169,7 @@ index fda0d4df..12e45bf4 100644 link.href = URL.createObjectURL(blob); link.download = filename; link.click(); -@@ -45,18 +45,25 @@ function save(blob, filename) { +@@ -46,18 +46,25 @@ function save(blob, filename) { // URL.revokeObjectURL( url ); breaks Firefox... } @@ -1200,7 +1200,7 @@ index fda0d4df..12e45bf4 100644 const params = { trs: false, -@@ -387,8 +394,8 @@ function init() { +@@ -388,8 +395,8 @@ function init() { const color = new THREE.Color(); for (let i = 0; i < 50; i++) { matrix.setPosition(Math.random() * 100 - 50, Math.random() * 100 - 50, Math.random() * 100 - 50); @@ -6124,7 +6124,7 @@ index b841fa6b..f3051618 100644 renderer.render(scene, camera); diff --git a/examples-testing/examples/webgl_lights_spotlight.ts b/examples-testing/examples/webgl_lights_spotlight.ts -index 894abaf6..342a70fb 100644 +index 43f70706..9668964e 100644 --- a/examples-testing/examples/webgl_lights_spotlight.ts +++ b/examples-testing/examples/webgl_lights_spotlight.ts @@ -5,9 +5,9 @@ import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; @@ -6148,7 +6148,7 @@ index 894abaf6..342a70fb 100644 for (let i = 0; i < filenames.length; i++) { const filename = filenames[i]; -@@ -155,8 +155,8 @@ function init() { +@@ -156,8 +156,8 @@ function init() { renderer.shadowMap.enabled = val; scene.traverse(function (child) { @@ -8600,7 +8600,7 @@ index d23c6843..5a190fab 100644 function onWindowResize() { diff --git a/examples-testing/examples/webgl_materials_texture_filters.ts b/examples-testing/examples/webgl_materials_texture_filters.ts -index 178c2ce4..fb67cabe 100644 +index 77b25468..b2ccb769 100644 --- a/examples-testing/examples/webgl_materials_texture_filters.ts +++ b/examples-testing/examples/webgl_materials_texture_filters.ts @@ -3,9 +3,9 @@ import * as THREE from 'three'; @@ -8624,7 +8624,7 @@ index 178c2ce4..fb67cabe 100644 imageCanvas.width = imageCanvas.height = 128; -@@ -85,7 +85,7 @@ function init() { +@@ -86,7 +86,7 @@ function init() { addPainting(scene, mesh); addPainting(scene2, mesh2); @@ -8633,7 +8633,7 @@ index 178c2ce4..fb67cabe 100644 zmesh.scale.x = image.width / 100; zmesh.scale.y = image.height / 100; -@@ -140,7 +140,7 @@ function init() { +@@ -141,7 +141,7 @@ function init() { document.addEventListener('mousemove', onDocumentMouseMove); } @@ -10390,7 +10390,7 @@ index 4f16d155..ff12d709 100644 init(); diff --git a/examples-testing/examples/webgl_postprocessing_masking.ts b/examples-testing/examples/webgl_postprocessing_masking.ts -index f6e7310b..598a33dc 100644 +index a4d09866..238c37da 100644 --- a/examples-testing/examples/webgl_postprocessing_masking.ts +++ b/examples-testing/examples/webgl_postprocessing_masking.ts @@ -6,8 +6,8 @@ import { ClearPass } from 'three/addons/postprocessing/ClearPass.js'; @@ -12944,7 +12944,7 @@ index d846e144..85bcff4c 100644 // Parameters for circular movement const radius = 5; // Smaller radius for individual circular movements diff --git a/examples-testing/examples/webgl_video_kinect.ts b/examples-testing/examples/webgl_video_kinect.ts -index 4f0e2f11..7b4a3fab 100644 +index 8abc9391..dd637649 100644 --- a/examples-testing/examples/webgl_video_kinect.ts +++ b/examples-testing/examples/webgl_video_kinect.ts @@ -2,9 +2,9 @@ import * as THREE from 'three'; @@ -12969,7 +12969,7 @@ index 4f0e2f11..7b4a3fab 100644 const texture = new THREE.VideoTexture(video); texture.minFilter = THREE.NearestFilter; -@@ -56,8 +56,8 @@ function init() { +@@ -57,8 +57,8 @@ function init() { pointSize: { value: 2 }, zOffset: { value: 1000 }, }, @@ -12980,7 +12980,7 @@ index 4f0e2f11..7b4a3fab 100644 blending: THREE.AdditiveBlending, depthTest: false, depthWrite: false, -@@ -99,7 +99,7 @@ function onWindowResize() { +@@ -100,7 +100,7 @@ function onWindowResize() { renderer.setSize(window.innerWidth, window.innerHeight); } @@ -13764,7 +13764,7 @@ index 5638c902..a274a953 100644 renderer.render(scene, camera); diff --git a/examples-testing/examples/webgpu_lights_tiled.ts b/examples-testing/examples/webgpu_lights_tiled.ts -index 7b7249ec..1d3c11bb 100644 +index 414efb41..886afc93 100644 --- a/examples-testing/examples/webgpu_lights_tiled.ts +++ b/examples-testing/examples/webgpu_lights_tiled.ts @@ -1,8 +1,9 @@ @@ -13819,7 +13819,7 @@ index 7b7249ec..1d3c11bb 100644 const light = new THREE.PointLight(hexColor, 1, distance); light.position.set(Math.random() * 300 - 150, 1, Math.random() * 300 - 150); light.power = power; -@@ -157,8 +158,7 @@ function init() { +@@ -156,8 +157,7 @@ function init() { function updatePostProcessing() { // tile indexes debug, needs to be updated every time the renderer size changes @@ -15058,7 +15058,7 @@ index e5cd0791..8a310a42 100644 init(); diff --git a/examples-testing/examples/webgpu_postprocessing_masking.ts b/examples-testing/examples/webgpu_postprocessing_masking.ts -index a4f56b17..ce7e7ad3 100644 +index fc87be20..54310173 100644 --- a/examples-testing/examples/webgpu_postprocessing_masking.ts +++ b/examples-testing/examples/webgpu_postprocessing_masking.ts @@ -1,8 +1,8 @@ @@ -15074,7 +15074,7 @@ index a4f56b17..ce7e7ad3 100644 init(); -@@ -50,7 +50,7 @@ function init() { +@@ -51,7 +51,7 @@ function init() { const sceneMask1 = pass(maskScene1, camera).a; const sceneMask2 = pass(maskScene2, camera).a; @@ -15120,7 +15120,7 @@ index 14e45012..b4bdcf2f 100644 child.receiveShadow = true; } diff --git a/examples-testing/examples/webgpu_postprocessing_outline.ts b/examples-testing/examples/webgpu_postprocessing_outline.ts -index 55a91329..ac77cc1b 100644 +index d25c12c5..a74590cf 100644 --- a/examples-testing/examples/webgpu_postprocessing_outline.ts +++ b/examples-testing/examples/webgpu_postprocessing_outline.ts @@ -1,6 +1,6 @@ @@ -15149,7 +15149,7 @@ index 55a91329..ac77cc1b 100644 const raycaster = new THREE.Raycaster(); const mouse = new THREE.Vector2(); -@@ -188,7 +188,7 @@ function init() { +@@ -196,7 +196,7 @@ function init() { renderer.domElement.style.touchAction = 'none'; renderer.domElement.addEventListener('pointermove', onPointerMove); @@ -15158,7 +15158,7 @@ index 55a91329..ac77cc1b 100644 if (event.isPrimary === false) return; mouse.x = (event.clientX / window.innerWidth) * 2 - 1; -@@ -197,7 +197,7 @@ function init() { +@@ -205,7 +205,7 @@ function init() { checkIntersection(); } diff --git a/src-testing/changes.patch b/src-testing/changes.patch index d5c5e067b..dd501907e 100644 --- a/src-testing/changes.patch +++ b/src-testing/changes.patch @@ -3342,7 +3342,7 @@ index a12f3563..e7ae8d1c 100644 } diff --git a/src-testing/src/renderers/common/Bindings.ts b/src-testing/src/renderers/common/Bindings.ts -index fee94385..0c13e27c 100644 +index 1414c94f..9a3e8e39 100644 --- a/src-testing/src/renderers/common/Bindings.ts +++ b/src-testing/src/renderers/common/Bindings.ts @@ -1,8 +1,42 @@ @@ -3515,8 +3515,8 @@ index fee94385..0c13e27c 100644 - if (binding.store === true) { + if ((binding as SampledTexture).store === true) { textureData.needsMipmap = true; - } else if ( - texture.generateMipmaps === true && + } else if (this.textures.needsMipmaps(texture) && textureData.needsMipmap === true) { + this.backend.generateMipmaps(texture); diff --git a/src-testing/src/renderers/common/Buffer.ts b/src-testing/src/renderers/common/Buffer.ts index 17013c6d..830dc0a8 100644 --- a/src-testing/src/renderers/common/Buffer.ts @@ -5057,7 +5057,7 @@ index 0ec34b04..573cae2b 100644 this.vertexProgram = vertexProgram; diff --git a/src-testing/src/renderers/common/Renderer.ts b/src-testing/src/renderers/common/Renderer.ts -index f0f25aa6..bf6dfebc 100644 +index 53368405..934f28ad 100644 --- a/src-testing/src/renderers/common/Renderer.ts +++ b/src-testing/src/renderers/common/Renderer.ts @@ -36,7 +36,35 @@ import { @@ -5375,8 +5375,8 @@ index f0f25aa6..bf6dfebc 100644 if (this._initialized === false) await this.init(); const renderContext = this._renderScene(scene, camera); -@@ -391,7 +577,7 @@ class Renderer { - await this.backend.resolveTimestampAsync(renderContext, 'render'); +@@ -395,7 +581,7 @@ class Renderer { + await this.backend.waitForGPU(); } - setMRT(mrt) { @@ -5384,7 +5384,7 @@ index f0f25aa6..bf6dfebc 100644 this._mrt = mrt; return this; -@@ -401,14 +587,14 @@ class Renderer { +@@ -405,14 +591,14 @@ class Renderer { return this._mrt; } @@ -5402,7 +5402,7 @@ index f0f25aa6..bf6dfebc 100644 const renderBundleData = this.backend.get(renderBundle); if (renderBundleData.renderContexts === undefined) renderBundleData.renderContexts = new Set(); -@@ -446,13 +632,13 @@ class Renderer { +@@ -450,13 +636,13 @@ class Renderer { for (let i = 0, l = renderObjects.length; i < l; i++) { const renderObject = renderObjects[i]; @@ -5421,7 +5421,7 @@ index f0f25aa6..bf6dfebc 100644 } } } -@@ -460,7 +646,7 @@ class Renderer { +@@ -464,7 +650,7 @@ class Renderer { this.backend.addBundle(renderContext, renderBundle); } @@ -5430,7 +5430,7 @@ index f0f25aa6..bf6dfebc 100644 if (this._initialized === false) { console.warn( 'THREE.Renderer: .render() called before the backend is initialized. Try using .renderAsync() instead.', -@@ -515,12 +701,12 @@ class Renderer { +@@ -519,12 +705,12 @@ class Renderer { return frameBufferTarget; } @@ -5445,7 +5445,7 @@ index f0f25aa6..bf6dfebc 100644 const previousRenderId = nodeFrame.renderId; const previousRenderContext = this._currentRenderContext; -@@ -549,7 +735,7 @@ class Renderer { +@@ -553,7 +739,7 @@ class Renderer { // @@ -5454,7 +5454,7 @@ index f0f25aa6..bf6dfebc 100644 this._currentRenderContext = renderContext; this._currentRenderObjectFunction = this._renderObjectFunction || this.renderObject; -@@ -621,7 +807,7 @@ class Renderer { +@@ -625,7 +811,7 @@ class Renderer { _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); _frustum.setFromProjectionMatrix(_projScreenMatrix, coordinateSystem); @@ -5463,7 +5463,7 @@ index f0f25aa6..bf6dfebc 100644 renderList.begin(); this._projectObject(scene, camera, 0, renderList); -@@ -635,14 +821,14 @@ class Renderer { +@@ -639,14 +825,14 @@ class Renderer { // if (renderTarget !== null) { @@ -5484,7 +5484,7 @@ index f0f25aa6..bf6dfebc 100644 renderContext.renderTarget = renderTarget; renderContext.depth = renderTarget.depthBuffer; renderContext.stencil = renderTarget.stencilBuffer; -@@ -663,11 +849,11 @@ class Renderer { +@@ -667,11 +853,11 @@ class Renderer { // @@ -5498,7 +5498,7 @@ index f0f25aa6..bf6dfebc 100644 // -@@ -701,8 +887,8 @@ class Renderer { +@@ -705,8 +891,8 @@ class Renderer { const quad = this._quad; @@ -5509,7 +5509,7 @@ index f0f25aa6..bf6dfebc 100644 quad.material.needsUpdate = true; } -@@ -730,13 +916,13 @@ class Renderer { +@@ -734,13 +920,13 @@ class Renderer { return this._activeMipmapLevel; } @@ -5526,7 +5526,7 @@ index f0f25aa6..bf6dfebc 100644 return await this.backend.getArrayBufferAsync(attribute); } -@@ -748,11 +934,11 @@ class Renderer { +@@ -752,11 +938,11 @@ class Renderer { return this._pixelRatio; } @@ -5540,7 +5540,7 @@ index f0f25aa6..bf6dfebc 100644 return target.set(this._width, this._height); } -@@ -764,7 +950,7 @@ class Renderer { +@@ -768,7 +954,7 @@ class Renderer { this.setSize(this._width, this._height, false); } @@ -5549,7 +5549,7 @@ index f0f25aa6..bf6dfebc 100644 this._width = width; this._height = height; -@@ -778,7 +964,7 @@ class Renderer { +@@ -782,7 +968,7 @@ class Renderer { if (this._initialized) this.backend.updateSize(); } @@ -5558,7 +5558,7 @@ index f0f25aa6..bf6dfebc 100644 this._width = width; this._height = height; -@@ -795,15 +981,15 @@ class Renderer { +@@ -799,15 +985,15 @@ class Renderer { if (this._initialized) this.backend.updateSize(); } @@ -5577,7 +5577,7 @@ index f0f25aa6..bf6dfebc 100644 const scissor = this._scissor; target.x = scissor.x; -@@ -814,13 +1000,15 @@ class Renderer { +@@ -818,13 +1004,15 @@ class Renderer { return target; } @@ -5597,7 +5597,7 @@ index f0f25aa6..bf6dfebc 100644 } } -@@ -828,34 +1016,36 @@ class Renderer { +@@ -832,34 +1020,36 @@ class Renderer { return this._scissorTest; } @@ -5642,7 +5642,7 @@ index f0f25aa6..bf6dfebc 100644 this._clearColor.set(color); this._clearColor.a = alpha; } -@@ -864,7 +1054,7 @@ class Renderer { +@@ -868,7 +1058,7 @@ class Renderer { return this._clearColor.a; } @@ -5651,7 +5651,7 @@ index f0f25aa6..bf6dfebc 100644 this._clearColor.a = alpha; } -@@ -872,7 +1062,7 @@ class Renderer { +@@ -876,7 +1066,7 @@ class Renderer { return this._clearDepth; } @@ -5660,7 +5660,7 @@ index f0f25aa6..bf6dfebc 100644 this._clearDepth = depth; } -@@ -880,11 +1070,11 @@ class Renderer { +@@ -884,11 +1074,11 @@ class Renderer { return this._clearStencil; } @@ -5674,7 +5674,7 @@ index f0f25aa6..bf6dfebc 100644 const renderContext = this._currentRenderContext; return renderContext && this.backend.isOccluded(renderContext, object); -@@ -904,9 +1094,9 @@ class Renderer { +@@ -908,9 +1098,9 @@ class Renderer { let renderTargetData = null; if (renderTarget !== null) { @@ -5686,7 +5686,7 @@ index f0f25aa6..bf6dfebc 100644 } this.backend.clear(color, depth, stencil, renderTargetData); -@@ -917,8 +1107,8 @@ class Renderer { +@@ -921,8 +1111,8 @@ class Renderer { const quad = this._quad; @@ -5697,7 +5697,7 @@ index f0f25aa6..bf6dfebc 100644 quad.material.needsUpdate = true; } -@@ -967,20 +1157,20 @@ class Renderer { +@@ -971,20 +1161,20 @@ class Renderer { dispose() { this.info.dispose(); @@ -5727,7 +5727,7 @@ index f0f25aa6..bf6dfebc 100644 this._renderTarget = renderTarget; this._activeCubeFace = activeCubeFace; this._activeMipmapLevel = activeMipmapLevel; -@@ -990,7 +1180,19 @@ class Renderer { +@@ -994,7 +1184,19 @@ class Renderer { return this._renderTarget; } @@ -5748,7 +5748,7 @@ index f0f25aa6..bf6dfebc 100644 this._renderObjectFunction = renderObjectFunction; } -@@ -998,7 +1200,7 @@ class Renderer { +@@ -1002,7 +1204,7 @@ class Renderer { return this._renderObjectFunction; } @@ -5757,7 +5757,7 @@ index f0f25aa6..bf6dfebc 100644 if (this._initialized === false) { console.warn( 'THREE.Renderer: .compute() called before the backend is initialized. Try using .computeAsync() instead.', -@@ -1009,7 +1211,7 @@ class Renderer { +@@ -1013,7 +1215,7 @@ class Renderer { // @@ -5766,7 +5766,7 @@ index f0f25aa6..bf6dfebc 100644 const previousRenderId = nodeFrame.renderId; -@@ -1024,9 +1226,9 @@ class Renderer { +@@ -1028,9 +1230,9 @@ class Renderer { // const backend = this.backend; @@ -5779,7 +5779,7 @@ index f0f25aa6..bf6dfebc 100644 const computeList = Array.isArray(computeNodes) ? computeNodes : [computeNodes]; -@@ -1075,7 +1277,7 @@ class Renderer { +@@ -1079,7 +1281,7 @@ class Renderer { nodeFrame.renderId = previousRenderId; } @@ -5788,7 +5788,7 @@ index f0f25aa6..bf6dfebc 100644 if (this._initialized === false) await this.init(); this.compute(computeNodes); -@@ -1083,13 +1285,13 @@ class Renderer { +@@ -1087,13 +1289,13 @@ class Renderer { await this.backend.resolveTimestampAsync(computeNodes, 'compute'); } @@ -5804,7 +5804,7 @@ index f0f25aa6..bf6dfebc 100644 if (this._initialized === false) { console.warn( 'THREE.Renderer: .hasFeature() called before the backend is initialized. Try using .hasFeatureAsync() instead.', -@@ -1101,7 +1303,7 @@ class Renderer { +@@ -1105,7 +1307,7 @@ class Renderer { return this.backend.hasFeature(name); } @@ -5813,7 +5813,7 @@ index f0f25aa6..bf6dfebc 100644 const renderContext = this._currentRenderContext; this._textures.updateTexture(framebufferTexture); -@@ -1114,54 +1316,68 @@ class Renderer { +@@ -1118,54 +1320,68 @@ class Renderer { this.backend.copyFramebufferToTexture(framebufferTexture, renderContext, rectangle); } @@ -5899,7 +5899,7 @@ index f0f25aa6..bf6dfebc 100644 .applyMatrix4(object.matrixWorld) .applyMatrix4(_projScreenMatrix); } -@@ -1171,7 +1387,7 @@ class Renderer { +@@ -1175,7 +1391,7 @@ class Renderer { for (let i = 0, l = groups.length; i < l; i++) { const group = groups[i]; @@ -5908,7 +5908,7 @@ index f0f25aa6..bf6dfebc 100644 if (groupMaterial && groupMaterial.visible) { renderList.push(object, geometry, groupMaterial, groupOrder, _vector4.z, group); -@@ -1188,7 +1404,7 @@ class Renderer { +@@ -1192,7 +1408,7 @@ class Renderer { const baseRenderList = renderList; // replace render list @@ -5917,7 +5917,7 @@ index f0f25aa6..bf6dfebc 100644 renderList.begin(); -@@ -1208,13 +1424,13 @@ class Renderer { +@@ -1212,13 +1428,13 @@ class Renderer { } } @@ -5933,7 +5933,7 @@ index f0f25aa6..bf6dfebc 100644 // process renderable objects for (let i = 0, il = renderList.length; i < il; i++) { -@@ -1225,42 +1441,50 @@ class Renderer { +@@ -1229,42 +1445,50 @@ class Renderer { const { object, geometry, material, group } = renderItem; @@ -5995,7 +5995,7 @@ index f0f25aa6..bf6dfebc 100644 let overridePositionNode; let overrideFragmentNode; let overrideDepthNode; -@@ -1345,14 +1569,22 @@ class Renderer { +@@ -1349,14 +1573,22 @@ class Renderer { object.onAfterRender(this, scene, camera, geometry, material, group); } @@ -6021,7 +6021,7 @@ index f0f25aa6..bf6dfebc 100644 passId, ); renderObject.drawRange = object.geometry.drawRange; -@@ -1360,18 +1592,18 @@ class Renderer { +@@ -1364,18 +1596,18 @@ class Renderer { // @@ -6046,7 +6046,7 @@ index f0f25aa6..bf6dfebc 100644 // -@@ -1385,32 +1617,39 @@ class Renderer { +@@ -1389,32 +1621,39 @@ class Renderer { this.backend.draw(renderObject, this.info); @@ -6211,10 +6211,10 @@ index ef5d3e46..fb6acc45 100644 this.attribute = attribute; diff --git a/src-testing/src/renderers/common/Textures.ts b/src-testing/src/renderers/common/Textures.ts -index 5eae41df..f88f361b 100644 +index 8d35f664..89e87264 100644 --- a/src-testing/src/renderers/common/Textures.ts +++ b/src-testing/src/renderers/common/Textures.ts -@@ -15,11 +15,56 @@ import { +@@ -13,11 +13,56 @@ import { CubeRefractionMapping, UnsignedByteType, } from '../../constants.js'; @@ -6250,7 +6250,8 @@ index 5eae41df..f88f361b 100644 + isDefaultTexture?: boolean; + generation?: number; +} -+ + +-const _size = /*@__PURE__*/ new Vector3(); +interface TextureOptions { + width?: number; + height?: number; @@ -6259,7 +6260,8 @@ index 5eae41df..f88f361b 100644 + levels?: number; +} --const _size = /*@__PURE__*/ new Vector3(); +-class Textures extends DataMap { +- constructor(renderer, backend, info) { +class Textures extends DataMap<{ + renderTarget: { key: RenderTarget; value: RenderTargetData }; + texture: { key: Texture; value: TextureData }; @@ -6267,14 +6269,12 @@ index 5eae41df..f88f361b 100644 + renderer: Renderer; + backend: Backend; + info: Info; - --class Textures extends DataMap { -- constructor(renderer, backend, info) { ++ + constructor(renderer: Renderer, backend: Backend, info: Info) { super(); this.renderer = renderer; -@@ -27,7 +72,7 @@ class Textures extends DataMap { +@@ -25,7 +70,7 @@ class Textures extends DataMap { this.info = info; } @@ -6283,7 +6283,7 @@ index 5eae41df..f88f361b 100644 const renderTargetData = this.get(renderTarget); const sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples; -@@ -124,7 +169,7 @@ class Textures extends DataMap { +@@ -122,7 +167,7 @@ class Textures extends DataMap { } } @@ -6292,7 +6292,7 @@ index 5eae41df..f88f361b 100644 const textureData = this.get(texture); if (textureData.initialized === true && textureData.version === texture.version) return; -@@ -242,7 +287,7 @@ class Textures extends DataMap { +@@ -240,7 +285,7 @@ class Textures extends DataMap { textureData.version = texture.version; } @@ -6301,7 +6301,7 @@ index 5eae41df..f88f361b 100644 let image = texture.images ? texture.images[0] : texture.image; if (image) { -@@ -250,18 +295,18 @@ class Textures extends DataMap { +@@ -248,18 +293,18 @@ class Textures extends DataMap { target.width = image.width; target.height = image.height; @@ -6324,19 +6324,18 @@ index 5eae41df..f88f361b 100644 mipLevelCount = texture.mipmaps.length; } else { mipLevelCount = Math.floor(Math.log2(Math.max(width, height))) + 1; -@@ -270,16 +315,16 @@ class Textures extends DataMap { +@@ -268,11 +313,15 @@ class Textures extends DataMap { return mipLevelCount; } - needsMipmaps(texture) { +- return this.isEnvironmentTexture(texture) || texture.isCompressedTexture === true || texture.generateMipmaps; + needsMipmaps(texture: Texture) { - if (this.isEnvironmentTexture(texture)) return true; - - return ( -- texture.isCompressedTexture === true || ++ return ( ++ this.isEnvironmentTexture(texture) || + (texture as CompressedTexture).isCompressedTexture === true || - (texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter) - ); ++ texture.generateMipmaps ++ ); } - isEnvironmentTexture(texture) { @@ -6344,7 +6343,7 @@ index 5eae41df..f88f361b 100644 const mapping = texture.mapping; return ( -@@ -290,7 +335,7 @@ class Textures extends DataMap { +@@ -283,7 +332,7 @@ class Textures extends DataMap { ); } @@ -7324,7 +7323,7 @@ index f409c2b1..bb53c090 100644 const monitor = renderObject.getMonitor(); diff --git a/src-testing/src/renderers/webgl-fallback/WebGLBackend.ts b/src-testing/src/renderers/webgl-fallback/WebGLBackend.ts -index 1cb7f52e..33491136 100644 +index ccf00b98..9816a022 100644 --- a/src-testing/src/renderers/webgl-fallback/WebGLBackend.ts +++ b/src-testing/src/renderers/webgl-fallback/WebGLBackend.ts @@ -13,6 +13,7 @@ import { WebGLBufferRenderer } from './WebGLBufferRenderer.js'; @@ -7335,7 +7334,7 @@ index 1cb7f52e..33491136 100644 // -@@ -666,7 +667,7 @@ class WebGLBackend extends Backend { +@@ -670,7 +671,7 @@ class WebGLBackend extends Backend { this.textureUtils.destroyTexture(texture); } @@ -7743,10 +7742,10 @@ index b1e72064..40f26bf1 100644 const nodeData = this.getDataFromNode(node, shaderStage, this.globalCache); diff --git a/src-testing/src/renderers/webgpu/WebGPUBackend.ts b/src-testing/src/renderers/webgpu/WebGPUBackend.ts -index f14d7df5..4fe783d9 100644 +index 930197a0..1760e4b2 100644 --- a/src-testing/src/renderers/webgpu/WebGPUBackend.ts +++ b/src-testing/src/renderers/webgpu/WebGPUBackend.ts -@@ -963,7 +963,7 @@ class WebGPUBackend extends Backend { +@@ -968,7 +968,7 @@ class WebGPUBackend extends Backend { this.textureUtils.destroyTexture(texture); } diff --git a/three.js b/three.js index b9144b9cf..04ddcb918 160000 --- a/three.js +++ b/three.js @@ -1 +1 @@ -Subproject commit b9144b9cfae5a985a23ea95ca1a77b0ae4fb366a +Subproject commit 04ddcb9189eca17fa92143170498081ec23a5dbb diff --git a/types/three/examples/jsm/exporters/GLTFExporter.d.ts b/types/three/examples/jsm/exporters/GLTFExporter.d.ts index 2360c1d00..33f2396dc 100644 --- a/types/three/examples/jsm/exporters/GLTFExporter.d.ts +++ b/types/three/examples/jsm/exporters/GLTFExporter.d.ts @@ -47,7 +47,11 @@ export interface GLTFExporterOptions { includeCustomExtensions?: boolean; } -type TextureUtils = { decompress: (texture: Texture, maxTextureSize?: number) => Promise | void }; +type TextureUtils = { + decompress: + | ((texture: Texture, maxTextureSize?: number) => Promise) + | ((texture: Texture, maxTextureSize?: number) => void); +}; declare class GLTFExporter { textureUtils: TextureUtils | null; diff --git a/types/three/src/renderers/common/Renderer.d.ts b/types/three/src/renderers/common/Renderer.d.ts index 97dc8c46f..8dfea89e0 100644 --- a/types/three/src/renderers/common/Renderer.d.ts +++ b/types/three/src/renderers/common/Renderer.d.ts @@ -169,6 +169,7 @@ declare class Renderer { get coordinateSystem(): import("../../constants.js").CoordinateSystem; compileAsync(scene: Object3D, camera: Camera, targetScene?: Object3D | null): Promise; renderAsync(scene: Scene, camera: Camera): Promise; + waitForGPU(): Promise; setMRT(mrt: MRTNode | null): this; getMRT(): MRTNode | null; _renderBundle(bundle: Bundle, sceneRef: Scene, lightsNode: LightsNode): void;