|
@@ -38,6 +38,8 @@ THREE.PMREMGenerator = ( function () {
|
|
|
|
|
|
var _flatCamera = new THREE.OrthographicCamera();
|
|
var _flatCamera = new THREE.OrthographicCamera();
|
|
var _blurMaterial = _getBlurShader( MAX_SAMPLES );
|
|
var _blurMaterial = _getBlurShader( MAX_SAMPLES );
|
|
|
|
+ var _equirectShader = null;
|
|
|
|
+ var _cubemapShader = null;
|
|
|
|
|
|
var { _lodPlanes, _sizeLods, _sigmas } = _createPlanes();
|
|
var { _lodPlanes, _sizeLods, _sigmas } = _createPlanes();
|
|
var _pingPongRenderTarget = null;
|
|
var _pingPongRenderTarget = null;
|
|
@@ -124,6 +126,25 @@ THREE.PMREMGenerator = ( function () {
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,
|
|
|
|
+ * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on
|
|
|
|
+ * one of them will cause any others to also become unusable.
|
|
|
|
+ */
|
|
|
|
+ dispose: function () {
|
|
|
|
+
|
|
|
|
+ _blurMaterial.dispose();
|
|
|
|
+ if ( _cubemapShader != null ) _cubemapShader.dispose();
|
|
|
|
+ if ( _equirectShader != null ) _equirectShader.dispose();
|
|
|
|
+ var plane;
|
|
|
|
+ for ( plane of _lodPlanes ) {
|
|
|
|
+
|
|
|
|
+ plane.dispose();
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+
|
|
};
|
|
};
|
|
|
|
|
|
function _createPlanes() {
|
|
function _createPlanes() {
|
|
@@ -300,7 +321,24 @@ THREE.PMREMGenerator = ( function () {
|
|
function _textureToCubeUV( texture, cubeUVRenderTarget ) {
|
|
function _textureToCubeUV( texture, cubeUVRenderTarget ) {
|
|
|
|
|
|
var scene = new THREE.Scene();
|
|
var scene = new THREE.Scene();
|
|
- var material = texture.isCubeTexture ? _getCubemapShader() : _getEquirectShader();
|
|
|
|
|
|
+ if ( texture.isCubeTexture ) {
|
|
|
|
+
|
|
|
|
+ if ( _cubemapShader == null ) {
|
|
|
|
+
|
|
|
|
+ _cubemapShader = _getCubemapShader();
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+
|
|
|
|
+ if ( _equirectShader == null ) {
|
|
|
|
+
|
|
|
|
+ _equirectShader = _getEquirectShader();
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ var material = texture.isCubeTexture ? _cubemapShader : _equirectShader;
|
|
scene.add( new THREE.Mesh( _lodPlanes[ 0 ], material ) );
|
|
scene.add( new THREE.Mesh( _lodPlanes[ 0 ], material ) );
|
|
var uniforms = material.uniforms;
|
|
var uniforms = material.uniforms;
|
|
|
|
|