Skip to content

Commit 5aaf6ee

Browse files
committed
PMREMNode: Manage own generator.
1 parent 89d62af commit 5aaf6ee

File tree

2 files changed

+24
-25
lines changed

2 files changed

+24
-25
lines changed

src/nodes/core/NodeBuilder.js

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ import { getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
2222
import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
2323
import ChainMap from '../../renderers/common/ChainMap.js';
2424

25-
import PMREMGenerator from '../../renderers/common/extras/PMREMGenerator.js';
26-
2725
import BindGroup from '../../renderers/common/BindGroup.js';
2826

2927
import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter } from '../../constants.js';
@@ -472,19 +470,6 @@ class NodeBuilder {
472470

473471
}
474472

475-
/**
476-
* Factory method for creating an instance of {@link PMREMGenerator}.
477-
*
478-
* @return {PMREMGenerator} The PMREM generator.
479-
*/
480-
createPMREMGenerator() {
481-
482-
// TODO: Move Materials.js to outside of the Nodes.js in order to remove this function and improve tree-shaking support
483-
484-
return new PMREMGenerator( this.renderer );
485-
486-
}
487-
488473
/**
489474
* Whether the given node is included in the internal array of nodes or not.
490475
*

src/nodes/pmrem/PMREMNode.js

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
77

88
import { WebGLCoordinateSystem } from '../../constants.js';
99
import { Texture } from '../../textures/Texture.js';
10-
11-
let _generator = null;
10+
import { PMREMGenerator } from '../../renderers/common/extras/PMREMGenerator.js';
1211

1312
const _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

320334
export default PMREMNode;

0 commit comments

Comments
 (0)