@@ -7,8 +7,7 @@ import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
77
88import { WebGLCoordinateSystem } from '../../constants.js' ;
99import { Texture } from '../../textures/Texture.js' ;
10-
11- let _generator = null ;
10+ import { PMREMGenerator } from '../../renderers/common/extras/PMREMGenerator.js' ;
1211
1312const _cache = new WeakMap ( ) ;
1413
@@ -36,9 +35,10 @@ function _generateCubeUVSize( imageHeight ) {
3635 *
3736 * @private
3837 * @param {Texture } texture - The texture to create the PMREM for.
38+ * @param {PMREMGenerator } generator - The PMREM generator.
3939 * @return {Texture } The PMREM.
4040 */
41- function _getPMREMFromTexture ( texture ) {
41+ function _getPMREMFromTexture ( texture , generator ) {
4242
4343 let cacheTexture = _cache . get ( texture ) ;
4444
@@ -52,7 +52,7 @@ function _getPMREMFromTexture( texture ) {
5252
5353 if ( isCubeMapReady ( image ) ) {
5454
55- cacheTexture = _generator . fromCubemap ( texture , cacheTexture ) ;
55+ cacheTexture = generator . fromCubemap ( texture , cacheTexture ) ;
5656
5757 } else {
5858
@@ -65,7 +65,7 @@ function _getPMREMFromTexture( texture ) {
6565
6666 if ( isEquirectangularMapReady ( image ) ) {
6767
68- cacheTexture = _generator . fromEquirectangular ( texture , cacheTexture ) ;
68+ cacheTexture = generator . fromEquirectangular ( texture , cacheTexture ) ;
6969
7070 } else {
7171
@@ -190,6 +190,14 @@ class PMREMNode extends TempNode {
190190 */
191191 this . _maxMip = uniform ( 0 ) ;
192192
193+ /**
194+ * A reference to a PMREM generator that can be globally used for generating PMREMs.
195+ *
196+ * @type {?PMREMGenerator }
197+ * @default null
198+ */
199+ this . _generator = null ;
200+
193201 /**
194202 * The `updateBeforeType` is set to `NodeUpdateType.RENDER`.
195203 *
@@ -249,7 +257,7 @@ class PMREMNode extends TempNode {
249257
250258 } else {
251259
252- pmrem = _getPMREMFromTexture ( texture ) ;
260+ pmrem = _getPMREMFromTexture ( texture , this . _generator ) ;
253261
254262 }
255263
@@ -267,14 +275,12 @@ class PMREMNode extends TempNode {
267275
268276 setup ( builder ) {
269277
270- if ( _generator === null ) {
278+ if ( this . _pmremGenerator === null ) {
271279
272- _generator = builder . createPMREMGenerator ( ) ;
280+ this . _pmremGenerator = new PMREMGenerator ( builder . renderer ) ;
273281
274282 }
275283
276- //
277-
278284 this . updateBefore ( builder ) ;
279285
280286 //
@@ -315,6 +321,14 @@ class PMREMNode extends TempNode {
315321
316322 }
317323
324+ dispose ( ) {
325+
326+ super . dispose ( ) ;
327+
328+ if ( this . _generator !== null ) this . _generator . dispose ( ) ;
329+
330+ }
331+
318332}
319333
320334export default PMREMNode ;
0 commit comments