Explorar o código

[shgraph] Parameters working somewhat

Clément Espeute hai 1 ano
pai
achega
96d8f11f3d

+ 44 - 14
hide/view/shadereditor/ShaderEditor.hx

@@ -167,7 +167,7 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 			@:privateAccess var id = currentGraph.current_node_id++;
 			inst.id = id;
 			inst.parameterId = draggedParamId;
-			inst.variable = shaderGraph.getParameter(inst.parameterId).variable;
+			inst.shaderGraph = shaderGraph;
 
 			graphEditor.opBox(inst, true, graphEditor.currentUndoBuffer);
 			graphEditor.commitUndo();
@@ -279,11 +279,11 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 		shaderGraph.checkParameterIndex();
 	}
 
-	// function updateParam(id : Int) {
-	// 	var param = shaderGraph.getParameter(id);
-	// 	setParamValueByName(currentShader, param.name, param.defaultValue);
-	// 	//previewParamDirty = true;
-	// }
+	function updateParam(id : Int) {
+		var param = shaderGraph.getParameter(id);
+		var v = compiledShader.inits.find((i) -> i.variable.name == param.name).variable;
+		setParamValue(meshShader, v, param.defaultValue);
+	}
 
 	function addParameter(parameter : Parameter, ?value : Dynamic) {
 
@@ -333,7 +333,7 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 					if (!shaderGraph.setParameterDefaultValue(parameter.id, range.value))
 						return;
 					//setBoxesParam(parameter.id);
-					//updateParam(parameter.id);
+					updateParam(parameter.id);
 				};
 				typeName = "Number";
 			case TVec(4, VFloat):
@@ -351,7 +351,7 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 					if (!shaderGraph.setParameterDefaultValue(parameter.id, [vecColor.x, vecColor.y, vecColor.z, vecColor.w]))
 						return;
 					//setBoxesParam(parameter.id);
-					//updateParam(parameter.id);
+					updateParam(parameter.id);
 				};
 			case TVec(n, VFloat):
 				if (value == null)
@@ -380,7 +380,7 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 						if (!shaderGraph.setParameterDefaultValue(parameter.id, value))
 							return;
 						//setBoxesParam(parameter.id);
-						//updateParam(parameter.id);
+						updateParam(parameter.id);
 					};
 					//if(min == null) min = isColor ? 0.0 : -1.0;
 					//if(max == null)	max = 1.0;
@@ -491,9 +491,9 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 		});
 		inputTitle.on("focus", function() { inputTitle.select(); } );
 
-		// elt.find(".header").on("click", function() {
-		// 	toggleParameter(elt);
-		// });
+		elt.find(".header").on("click", function() {
+			toggleParameter(elt);
+		});
 
 		elt.on("dragstart", function(e) {
 			draggedParamId = parameter.id;
@@ -530,6 +530,32 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 		return elt;
 	}
 
+	function toggleParameter( elt : JQuery, ?b : Bool) {
+		if (b != null) {
+			if (b) {
+				elt.find(".content").show();
+				var icon = elt.find(".ico");
+				icon.removeClass("ico-chevron-right");
+				icon.addClass("ico-chevron-down");
+			} else {
+				elt.find(".content").hide();
+				var icon = elt.find(".ico");
+				icon.addClass("ico-chevron-right");
+				icon.removeClass("ico-chevron-down");
+			}
+		} else {
+			elt.find(".content").toggle();
+			var icon = elt.find(".ico");
+			if (icon.hasClass("ico-chevron-right")) {
+				icon.removeClass("ico-chevron-right");
+				icon.addClass("ico-chevron-down");
+			} else {
+				icon.addClass("ico-chevron-right");
+				icon.removeClass("ico-chevron-down");
+			}
+		}
+	}
+
 	function moveParameterTo(paramA: Parameter, paramB: Parameter, after: Bool) {
 		if (paramA == paramB)
 			return;
@@ -870,8 +896,12 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 		for (init in compiledShader.inits) {
 			if (init.variable == previewVar)
 				setParamValue(shader, previewVar, node.getId() + 1);
-			else
-				setParamValue(shader, init.variable, init.value);
+			else {
+				var param = shaderGraph.parametersAvailable.find((v) -> v.name == init.variable.name);
+				if (param !=null) {
+					setParamValue(shader, init.variable, param.defaultValue);
+				} 
+			}
 		}
 	}
 

+ 1 - 6
hrt/shgraph/ShaderGraph.hx

@@ -650,13 +650,8 @@ class Graph {
 	public function generate(nodes : Array<Dynamic>, edges : Array<Edge>) {
 		current_node_id = 0;
 		for (n in nodes) {
-			var node = ShaderNode.createFromDynamic(n);
+			var node = ShaderNode.createFromDynamic(n, parent);
 			this.nodes.set(node.id, node);
-			var shaderParam = Std.downcast(node, ShaderParam);
-			if (shaderParam != null) {
-				var paramShader = getParameter(shaderParam.parameterId);
-				shaderParam.variable = paramShader.variable;
-			}
 			current_node_id = hxd.Math.imax(current_node_id, node.id+1);
 		}
 

+ 5 - 1
hrt/shgraph/ShaderNode.hx

@@ -136,9 +136,13 @@ implements hide.view.GraphInterface.IGraphNode
 		};
 	}
 
-	public static function createFromDynamic(data: Dynamic) : ShaderNode {
+	public static function createFromDynamic(data: Dynamic, graph: ShaderGraph) : ShaderNode {
 		var type = std.Type.resolveClass(data.type);
 		var inst = std.Type.createInstance(type, []);
+		var shaderParam = Std.downcast(inst, ShaderParam);
+		if (shaderParam != null) {
+			shaderParam.shaderGraph = graph;
+		}
 		inst.x = data.x;
 		inst.y = data.y;
 		inst.id = data.id;

+ 9 - 4
hrt/shgraph/ShaderParam.hx

@@ -9,11 +9,14 @@ class ShaderParam extends ShaderNode {
 	@prop() public var parameterId : Int;
 	@prop() public var perInstance : Bool;
 
+	public var shaderGraph : ShaderGraph;
+
 	public function new() {
 		
 	}
 
 	override function getOutputs() : Array<ShaderNode.OutputInfo> {
+		var variable = getVariable();
 		var t = switch(variable.type) {
 			case TFloat:
 				SgFloat(1);
@@ -28,6 +31,7 @@ class ShaderParam extends ShaderNode {
 	}
 
 	override function generate(ctx: NodeGenContext) {
+		var variable = getVariable();
 		var v = ctx.getGlobalParam(variable.name, variable.type);
 
 		ctx.setOutput(0, v);
@@ -41,8 +45,9 @@ class ShaderParam extends ShaderNode {
 		}
 	}
 
-	public var variable : TVar;
-
+	function getVariable() : TVar {
+		return shaderGraph.getParameter(parameterId).variable;
+	}
 
 	override public function loadProperties(props : Dynamic) {
 		parameterId = Reflect.field(props, "parameterId");
@@ -71,7 +76,7 @@ class ShaderParam extends ShaderNode {
 	}
 	public function setDisplayValue(value : String) {
 		parameterDisplay = value;
-		switch (this.variable.type) {
+		switch (this.getVariable().type) {
 			case TFloat:
 				if (displayDiv != null)
 					displayDiv.html(value);
@@ -87,7 +92,7 @@ class ShaderParam extends ShaderNode {
 	override public function getPropertiesHTML(width : Float) : Array<hide.Element> {
 		var elements = super.getPropertiesHTML(width);
 		var height = 25;
-		switch (this.variable.type) {
+		switch (getVariable().type) {
 			case TFloat:
 				displayDiv = new hide.Element('<div class="float-preview" ></div>');
 				height += 20;