Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/api/en/scenes/Scene.html
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ <h3>[method:JSON toJSON]</h3>
Return the scene data in JSON format.
</p>

<h3>[method:null dispose]()</h3>
<p>
Clears scene related data internally cached by [page:WebGLRenderer].
</p>

<h2>Source</h2>

[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
Expand Down
5 changes: 5 additions & 0 deletions docs/api/zh/scenes/Scene.html
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,11 @@ <h3>[method:JSON toJSON]</h3>
使用JSON格式返回场景数据。
</p>

<h3>[method:null dispose]()</h3>
<p>
TODO
</p>

<h2>源代码</h2>

[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
Expand Down
12 changes: 12 additions & 0 deletions src/renderers/webgl/WebGLRenderLists.js
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,16 @@ function WebGLRenderLists() {

var lists = {};

function onSceneDispose( event ) {

var scene = event.target;

scene.removeEventListener( 'dispose', onSceneDispose );

delete lists[ scene.id ];

}

function get( scene, camera ) {

var cameras = lists[ scene.id ];
Expand All @@ -162,6 +172,8 @@ function WebGLRenderLists() {
lists[ scene.id ] = {};
lists[ scene.id ][ camera.id ] = list;

scene.addEventListener( 'dispose', onSceneDispose );

} else {

list = cameras[ camera.id ];
Expand Down
12 changes: 12 additions & 0 deletions src/renderers/webgl/WebGLRenderStates.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,16 @@ function WebGLRenderStates() {

var renderStates = {};

function onSceneDispose( event ) {

var scene = event.target;

scene.removeEventListener( 'dispose', onSceneDispose );

delete renderStates[ scene.id ];

}

function get( scene, camera ) {

var renderState;
Expand All @@ -68,6 +78,8 @@ function WebGLRenderStates() {
renderStates[ scene.id ] = {};
renderStates[ scene.id ][ camera.id ] = renderState;

scene.addEventListener( 'dispose', onSceneDispose );

} else {

if ( renderStates[ scene.id ][ camera.id ] === undefined ) {
Expand Down
6 changes: 6 additions & 0 deletions src/scenes/Scene.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,12 @@ Scene.prototype = Object.assign( Object.create( Object3D.prototype ), {

return data;

},

dispose: function () {

this.dispatchEvent( { type: 'dispose' } );

}

} );
Expand Down