|
@@ -9,41 +9,58 @@ function WebGLCubeUVMaps( renderer ) {
|
|
|
|
|
|
function get( texture ) {
|
|
|
|
|
|
- if ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) {
|
|
|
+ if ( texture && texture.isTexture ) {
|
|
|
|
|
|
const mapping = texture.mapping;
|
|
|
|
|
|
const isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );
|
|
|
const isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );
|
|
|
|
|
|
+ // equirect/cube map to cubeUV conversion
|
|
|
+
|
|
|
if ( isEquirectMap || isCubeMap ) {
|
|
|
|
|
|
- // equirect/cube map to cubeUV conversion
|
|
|
+ if ( texture.isRenderTargetTexture && texture.needsPMREMUpdate === true ) {
|
|
|
+
|
|
|
+ texture.needsPMREMUpdate = false;
|
|
|
+
|
|
|
+ let renderTarget = cubeUVmaps.get( texture );
|
|
|
|
|
|
- if ( cubeUVmaps.has( texture ) ) {
|
|
|
+ if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
|
|
|
|
|
|
- return cubeUVmaps.get( texture ).texture;
|
|
|
+ renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );
|
|
|
+ cubeUVmaps.set( texture, renderTarget );
|
|
|
+
|
|
|
+ return renderTarget.texture;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- const image = texture.image;
|
|
|
+ if ( cubeUVmaps.has( texture ) ) {
|
|
|
+
|
|
|
+ return cubeUVmaps.get( texture ).texture;
|
|
|
|
|
|
- if ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {
|
|
|
+ } else {
|
|
|
|
|
|
- if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
|
|
|
+ const image = texture.image;
|
|
|
|
|
|
- const renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );
|
|
|
- cubeUVmaps.set( texture, renderTarget );
|
|
|
+ if ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {
|
|
|
|
|
|
- texture.addEventListener( 'dispose', onTextureDispose );
|
|
|
+ if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
|
|
|
|
|
|
- return renderTarget.texture;
|
|
|
+ const renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );
|
|
|
+ cubeUVmaps.set( texture, renderTarget );
|
|
|
|
|
|
- } else {
|
|
|
+ texture.addEventListener( 'dispose', onTextureDispose );
|
|
|
+
|
|
|
+ return renderTarget.texture;
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ // image not yet ready. try the conversion next frame
|
|
|
|
|
|
- // image not yet ready. try the conversion next frame
|
|
|
+ return null;
|
|
|
|
|
|
- return null;
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|