提交 8dc9e7c4 编写于 作者: E Emmett Lalish

added dispose method

上级 b54a2efd
......@@ -38,6 +38,8 @@ THREE.PMREMGenerator = ( function () {
var _flatCamera = new THREE.OrthographicCamera();
var _blurMaterial = _getBlurShader( MAX_SAMPLES );
var _equirectShader = null;
var _cubemapShader = null;
var { _lodPlanes, _sizeLods, _sigmas } = _createPlanes();
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() {
......@@ -300,7 +321,24 @@ THREE.PMREMGenerator = ( function () {
function _textureToCubeUV( texture, cubeUVRenderTarget ) {
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 ) );
var uniforms = material.uniforms;
......
......@@ -12,5 +12,6 @@ export class PMREMGenerator {
fromScene( scene:Scene, sigma?:number, near?:number, far?:number ): WebGLRenderTarget;
fromEquirectangular( equirectangular:Texture ): WebGLRenderTarget;
fromCubemap( cubemap:CubeTexture ): WebGLRenderTarget;
dispose(): void;
}
......@@ -64,6 +64,8 @@ var PMREMGenerator = ( function () {
var _flatCamera = new OrthographicCamera();
var _blurMaterial = _getBlurShader( MAX_SAMPLES );
var _equirectShader = null;
var _cubemapShader = null;
var { _lodPlanes, _sizeLods, _sigmas } = _createPlanes();
var _pingPongRenderTarget = null;
......@@ -150,6 +152,25 @@ var 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() {
......@@ -326,7 +347,24 @@ var PMREMGenerator = ( function () {
function _textureToCubeUV( texture, cubeUVRenderTarget ) {
var scene = new 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 Mesh( _lodPlanes[ 0 ], material ) );
var uniforms = material.uniforms;
......
......@@ -77,14 +77,19 @@
planeMesh.rotation.x = - Math.PI * 0.5;
scene.add( planeMesh );
var hdrUrls = [ 'px.hdr', 'nx.hdr', 'py.hdr', 'ny.hdr', 'pz.hdr', 'nz.hdr' ];
var pmremGenerator = new PMREMGenerator( renderer );
THREE.DefaultLoadingManager.onLoad = function ( ) {
pmremGenerator.dispose();
}
var hdrUrls = [ 'px.hdr', 'nx.hdr', 'py.hdr', 'ny.hdr', 'pz.hdr', 'nz.hdr' ];
hdrCubeMap = new HDRCubeTextureLoader()
.setPath( './textures/cube/pisaHDR/' )
.setDataType( THREE.UnsignedByteType )
.load( hdrUrls, function () {
var pmremGenerator = new PMREMGenerator( renderer );
hdrCubeRenderTarget = pmremGenerator.fromCubemap( hdrCubeMap );
hdrCubeMap.magFilter = THREE.LinearFilter;
......@@ -99,7 +104,6 @@
ldrCubeMap.encoding = THREE.GammaEncoding;
var pmremGenerator = new PMREMGenerator( renderer );
ldrCubeRenderTarget = pmremGenerator.fromCubemap( ldrCubeMap );
} );
......@@ -113,7 +117,6 @@
rgbmCubeMap.encoding = THREE.RGBM16Encoding;
rgbmCubeMap.format = THREE.RGBAFormat;
var pmremGenerator = new PMREMGenerator( renderer );
rgbmCubeRenderTarget = pmremGenerator.fromCubemap( rgbmCubeMap );
rgbmCubeMap.magFilter = THREE.LinearFilter;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册