Pārlūkot izejas kodu

auto NodeMaterial build

sunag 7 gadi atpakaļ
vecāks
revīzija
7a71a6b061

+ 27 - 3
examples/js/nodes/NodeMaterial.js

@@ -78,7 +78,24 @@ THREE.NodeMaterial.prototype.updateFrame = function ( frame ) {
 
 };
 
-THREE.NodeMaterial.prototype.build = function () {
+THREE.NodeMaterial.prototype.onBeforeCompile = function (shader, renderer) {
+
+	if ( this.needsUpdate ) {
+
+		this.build( { dispose : false } );
+
+		shader.uniforms = this.uniforms;
+		shader.vertexShader = this.vertexShader;
+		shader.fragmentShader = this.fragmentShader;
+
+	}
+
+};
+
+THREE.NodeMaterial.prototype.build = function ( params ) {
+
+	params = params || {};
+	params.dispose = params.dispose !== undefined ? params.dispose : true;
 
 	var vertex, fragment;
 
@@ -253,8 +270,15 @@ THREE.NodeMaterial.prototype.build = function () {
 		'}'
 	].join( "\n" );
 
-	this.needsUpdate = true;
-	this.dispose(); // force update
+	if ( params.dispose ) {
+
+		// force update
+
+		this.needsUpdate = false;
+
+		this.dispose();
+
+	}
 
 	return this;
 

+ 0 - 2
examples/webgl_loader_nodes.html

@@ -248,8 +248,6 @@
 
 					time.timeScale = true;
 
-					loader.material.build();
-
 					// gui
 
 					addGui( 'timeScale', time.scale, function ( val ) {

+ 4 - 8
examples/webgl_materials_nodes.html

@@ -700,7 +700,7 @@
 
 						blend.b = val ? displace : displaceY;
 
-						mtl.build();
+						mtl.needsUpdate = true;
 
 					} );
 
@@ -785,7 +785,7 @@
 
 						}
 
-						mtl.build();
+						mtl.needsUpdate = true;
 
 					} );
 
@@ -945,7 +945,7 @@
 
 						mtl.color = val ? diffuse : new THREE.ColorNode( 0xEEEEEE );
 
-						mtl.build();
+						mtl.needsUpdate = true;
 
 					} );
 
@@ -1902,7 +1902,7 @@
 
 						mtl.ao = val ? new THREE.FloatNode() : undefined;
 
-						mtl.build();
+						mtl.needsUpdate = true;
 
 					} );
 
@@ -2196,7 +2196,6 @@
 					var distanceMtl = new THREE.PhongNodeMaterial();
 					distanceMtl.environment = objectDepth;
 					distanceMtl.side = THREE.BackSide;
-					distanceMtl.build();
 
 					rtMaterial = distanceMtl;
 
@@ -2305,9 +2304,6 @@
 
 			}
 
-			// build shader
-			mtl.build();
-
 			// set material
 			mesh.material = mtl;
 

+ 0 - 1
examples/webgl_mirror_nodes.html

@@ -211,7 +211,6 @@
 			groundMirrorMaterial.environmentAlpha = mask;
 			groundMirrorMaterial.normal = normal;
 			//groundMirrorMaterial.normalScale = new THREE.FloatNode( 1 );
-			groundMirrorMaterial.build();
 
 			// test serialization
 /*

+ 0 - 3
examples/webgl_sprites_nodes.html

@@ -203,7 +203,6 @@
 			sprite1.scale.y = spriteHeight;
 			sprite1.material.color = new THREE.TextureNode( walkingManTexture );
 			sprite1.material.color.coord = createHorizontalSpriteSheetNode( 8, 10 );
-			sprite1.material.build();
 
 			scene.add( sprite2 = new THREE.Mesh( plane, new THREE.SpriteNodeMaterial() ) );
 			sprite2.position.x = 30;
@@ -223,7 +222,6 @@
 				new THREE.PositionNode(),
 				THREE.OperatorNode.ADD
 			);
-			sprite2.material.build();
 
 			var sineWaveFunction = new THREE.FunctionNode( [
 				// https://stackoverflow.com/questions/36174431/how-to-make-a-wave-warp-effect-in-shader
@@ -245,7 +243,6 @@
 				"phase": new THREE.TimerNode()
 			} );
 			sprite3.material.fog = true;
-			sprite3.material.build();
 
 			//
 			//	Test serialization