Forráskód Böngészése

NodeEditor: Make sure scene is properly resetted. (#28992)

Michael Herzog 1 éve
szülő
commit
929741e32a
2 módosított fájl, 26 hozzáadás és 2 törlés
  1. 20 0
      playground/NodeEditorUtils.js
  2. 6 2
      playground/editors/ScriptableEditor.js

+ 20 - 0
playground/NodeEditorUtils.js

@@ -1,5 +1,6 @@
 import { StringInput, NumberInput, ColorInput, Element, LabelElement } from 'flow';
 import { string, float, vec2, vec3, vec4, color } from 'three/tsl';
+import { Color } from 'three';
 import { setInputAestheticsFromType, setOutputAestheticsFromType } from './DataTypeLib.js';
 
 export function exportJSON( object, name ) {
@@ -41,6 +42,25 @@ export function disposeScene( scene ) {
 
 }
 
+export function resetScene( scene ) {
+
+	if ( scene.environment !== null ) {
+
+		scene.environment.dispose();
+		scene.environment = null;
+
+	}
+
+	if ( scene.background !== null ) {
+
+		if ( scene.background.isTexture ) scene.background.dispose();
+
+	}
+
+	scene.background = new Color( 0x333333 );
+
+}
+
 export function disposeMaterial( material )	{
 
 	material.dispose();

+ 6 - 2
playground/editors/ScriptableEditor.js

@@ -1,6 +1,6 @@
 import { BaseNodeEditor } from '../BaseNodeEditor.js';
 import { CodeEditorElement } from '../elements/CodeEditorElement.js';
-import { disposeScene, createElementFromJSON, isGPUNode, onValidType } from '../NodeEditorUtils.js';
+import { disposeScene, resetScene, createElementFromJSON, isGPUNode, onValidType } from '../NodeEditorUtils.js';
 import { global, scriptable, js, scriptableValue } from 'three/tsl';
 import { getColorFromType, setInputAestheticsFromType, setOutputAestheticsFromType } from '../DataTypeLib.js';
 
@@ -200,6 +200,8 @@ export class ScriptableEditor extends BaseNodeEditor {
 
 				disposeScene( editorOutputAdded );
 
+				resetScene( scene );
+
 			} else if ( composer && editorOutputAdded && editorOutputAdded.isPass === true ) {
 
 				composer.removePass( editorOutputAdded );
@@ -226,6 +228,8 @@ export class ScriptableEditor extends BaseNodeEditor {
 
 				disposeScene( editorOutputAdded );
 
+				resetScene( scene );
+
 			} else if ( composer && editorOutputAdded && editorOutputAdded.isPass === true ) {
 
 				composer.removePass( editorOutputAdded );
@@ -408,7 +412,7 @@ export class ScriptableEditor extends BaseNodeEditor {
 
 	_initExternalConnection() {
 
-		setInputAestheticsFromType(this.title, 'CodeNode' ).onValid( onValidType( 'CodeNode' ) ).onConnect( () => {
+		setInputAestheticsFromType( this.title, 'CodeNode' ).onValid( onValidType( 'CodeNode' ) ).onConnect( () => {
 
 			this.hasExternalEditor ? this._toExternal() : this._toInternal();
 

粤ICP备19079148号