Skip to content

Commit 95eb6f2

Browse files
authored
Texture: Introduce pmremVersion (#27963)
1 parent cde048c commit 95eb6f2

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

src/renderers/webgl/WebGLCubeUVMaps.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,26 @@ function WebGLCubeUVMaps( renderer ) {
2020

2121
if ( isEquirectMap || isCubeMap ) {
2222

23-
if ( texture.isRenderTargetTexture && texture.needsPMREMUpdate === true ) {
23+
let renderTarget = cubeUVmaps.get( texture );
2424

25-
texture.needsPMREMUpdate = false;
25+
const currentPMREMVersion = renderTarget !== undefined ? renderTarget.texture.pmremVersion : 0;
2626

27-
let renderTarget = cubeUVmaps.get( texture );
27+
if ( texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion ) {
2828

2929
if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
3030

3131
renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );
32+
renderTarget.texture.pmremVersion = texture.pmremVersion;
33+
3234
cubeUVmaps.set( texture, renderTarget );
3335

3436
return renderTarget.texture;
3537

3638
} else {
3739

38-
if ( cubeUVmaps.has( texture ) ) {
40+
if ( renderTarget !== undefined ) {
3941

40-
return cubeUVmaps.get( texture ).texture;
42+
return renderTarget.texture;
4143

4244
} else {
4345

@@ -47,7 +49,9 @@ function WebGLCubeUVMaps( renderer ) {
4749

4850
if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
4951

50-
const renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );
52+
renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );
53+
renderTarget.texture.pmremVersion = texture.pmremVersion;
54+
5155
cubeUVmaps.set( texture, renderTarget );
5256

5357
texture.addEventListener( 'dispose', onTextureDispose );

src/textures/Texture.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class Texture extends EventDispatcher {
7070
this.onUpdate = null;
7171

7272
this.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not
73-
this.needsPMREMUpdate = false; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)
73+
this.pmremVersion = 0; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)
7474

7575
}
7676

@@ -301,6 +301,16 @@ class Texture extends EventDispatcher {
301301

302302
}
303303

304+
set needsPMREMUpdate( value ) {
305+
306+
if ( value === true ) {
307+
308+
this.pmremVersion ++;
309+
310+
}
311+
312+
}
313+
304314
}
305315

306316
Texture.DEFAULT_IMAGE = null;

0 commit comments

Comments
 (0)