Skip to content

Commit

Permalink
EnvironmentNode: Cache Equirectangular Textures (#26491)
Browse files Browse the repository at this point in the history
  • Loading branch information
sunag committed Jul 25, 2023
1 parent 93996d7 commit 4a75811
Showing 1 changed file with 17 additions and 5 deletions.
22 changes: 17 additions & 5 deletions examples/jsm/nodes/lighting/EnvironmentNode.js
Expand Up @@ -12,6 +12,8 @@ import { float, vec2 } from '../shadernode/ShaderNode.js';
import { cubeTexture } from '../accessors/CubeTextureNode.js';
import { reference } from '../accessors/ReferenceNode.js';

const envNodeCache = new WeakMap();

class EnvironmentNode extends LightingNode {

constructor( envNode = null ) {
Expand All @@ -29,13 +31,23 @@ class EnvironmentNode extends LightingNode {

if ( envNode.isTextureNode && envNode.value.isCubeTexture !== true ) {

const texture = envNode.value;
const renderer = builder.renderer;
let cacheEnvNode = envNodeCache.get( envNode.value );

if ( cacheEnvNode === undefined ) {

const texture = envNode.value;
const renderer = builder.renderer;

// @TODO: Add dispose logic here
const cubeRTT = builder.getCubeRenderTarget( 512 ).fromEquirectangularTexture( renderer, texture );

// @TODO: Add dispose logic here
const cubeRTT = builder.getCubeRenderTarget( 512 ).fromEquirectangularTexture( renderer, texture );
cacheEnvNode = cubeTexture( cubeRTT.texture );

envNodeCache.set( envNode.value, cacheEnvNode );

}

envNode = cubeTexture( cubeRTT.texture );
envNode = cacheEnvNode;

}

Expand Down

0 comments on commit 4a75811

Please sign in to comment.