소스 검색

Fix multiple param node for the same param

Jed 4 년 전
부모
커밋
2f6a92a343
2개의 변경된 파일20개의 추가작업 그리고 13개의 파일을 삭제
  1. 1 1
      hrt/shgraph/ShaderNode.hx
  2. 19 12
      hrt/shgraph/nodes/SubGraph.hx

+ 1 - 1
hrt/shgraph/ShaderNode.hx

@@ -2,7 +2,7 @@ package hrt.shgraph;
 
 
 using hxsl.Ast;
 using hxsl.Ast;
 
 
-typedef InputInfo = { name : String, type : ShaderType.SType, hasProperty : Bool, isRequired : Bool, ?id : Int };
+typedef InputInfo = { name : String, type : ShaderType.SType, hasProperty : Bool, isRequired : Bool, ?ids : Array<Int> };
 typedef OutputInfo = { name : String, type : ShaderType.SType, ?id : Int };
 typedef OutputInfo = { name : String, type : ShaderType.SType, ?id : Int };
 
 
 @:autoBuild(hrt.shgraph.ParseFieldsMacro.build())
 @:autoBuild(hrt.shgraph.ParseFieldsMacro.build())

+ 19 - 12
hrt/shgraph/nodes/SubGraph.hx

@@ -44,24 +44,29 @@ class SubGraph extends ShaderNode {
 						var shaderParam = Std.downcast(node.instance, ShaderParam);
 						var shaderParam = Std.downcast(node.instance, ShaderParam);
 						var paramName = subShaderGraph.getParameter(shaderParam.parameterId).name;
 						var paramName = subShaderGraph.getParameter(shaderParam.parameterId).name;
 						var paramId = "param_" + shaderParam.parameterId;
 						var paramId = "param_" + shaderParam.parameterId;
+						var paramInfo = inputsInfo.get(prefixSubGraph+paramId);
+						var ids = [];
+						if (paramInfo != null && paramInfo.ids != null)
+							ids = paramInfo.ids;
+						ids.push(node.id);
 						if (!inputsInfo.exists(prefixSubGraph + paramId)) {
 						if (!inputsInfo.exists(prefixSubGraph + paramId)) {
-							inputsInfo.set(prefixSubGraph+paramId, { name : paramName , type: ShaderType.getSType(shaderParam.variable.type), hasProperty: false, isRequired : false, id : node.id });
 							inputInfoKeys.push(prefixSubGraph+paramId);
 							inputInfoKeys.push(prefixSubGraph+paramId);
 						}
 						}
+						inputsInfo.set(prefixSubGraph+paramId, { name : paramName , type: ShaderType.getSType(shaderParam.variable.type), hasProperty: false, isRequired : false, ids : ids });
 					case "ShaderInput":
 					case "ShaderInput":
 						var shaderInput = Std.downcast(node.instance, ShaderInput);
 						var shaderInput = Std.downcast(node.instance, ShaderInput);
 
 
-						inputsInfo.set(prefixSubGraph+node.id, { name : "*" + shaderInput.variable.name , type: ShaderType.getSType(shaderInput.variable.type), hasProperty: false, isRequired : false, id : node.id });
+						inputsInfo.set(prefixSubGraph+node.id, { name : "*" + shaderInput.variable.name , type: ShaderType.getSType(shaderInput.variable.type), hasProperty: false, isRequired : false, ids : [node.id] });
 						inputInfoKeys.push(prefixSubGraph+node.id);
 						inputInfoKeys.push(prefixSubGraph+node.id);
 					case "ShaderGlobalInput":
 					case "ShaderGlobalInput":
 						var shaderInput = Std.downcast(node.instance, ShaderGlobalInput);
 						var shaderInput = Std.downcast(node.instance, ShaderGlobalInput);
 
 
-						inputsInfo.set(prefixSubGraph+node.id, { name : "*" + shaderInput.variable.name , type: ShaderType.getSType(shaderInput.variable.type), hasProperty: false, isRequired : false, id : node.id });
+						inputsInfo.set(prefixSubGraph+node.id, { name : "*" + shaderInput.variable.name , type: ShaderType.getSType(shaderInput.variable.type), hasProperty: false, isRequired : false, ids : [node.id] });
 						inputInfoKeys.push(prefixSubGraph+node.id);
 						inputInfoKeys.push(prefixSubGraph+node.id);
 					case "ShaderCameraInput":
 					case "ShaderCameraInput":
 						var shaderInput = Std.downcast(node.instance, ShaderCameraInput);
 						var shaderInput = Std.downcast(node.instance, ShaderCameraInput);
 
 
-						inputsInfo.set(prefixSubGraph+node.id, { name : "*" + shaderInput.variable.name , type: ShaderType.getSType(shaderInput.variable.type), hasProperty: false, isRequired : false, id : node.id });
+						inputsInfo.set(prefixSubGraph+node.id, { name : "*" + shaderInput.variable.name , type: ShaderType.getSType(shaderInput.variable.type), hasProperty: false, isRequired : false, ids : [node.id] });
 						inputInfoKeys.push(prefixSubGraph+node.id);
 						inputInfoKeys.push(prefixSubGraph+node.id);
 					case "ShaderOutput":
 					case "ShaderOutput":
 						var shaderOutput = Std.downcast(node.instance, ShaderOutput);
 						var shaderOutput = Std.downcast(node.instance, ShaderOutput);
@@ -96,14 +101,16 @@ class SubGraph extends ShaderNode {
 			var inputTVar = getInput(inputKey);
 			var inputTVar = getInput(inputKey);
 
 
 			if (inputTVar != null) {
 			if (inputTVar != null) {
-				var nodeToReplace = subShaderGraph.getNodes().get(inputInfo.id);
-				for (i in 0...nodeToReplace.outputs.length) {
-					var inputNode = nodeToReplace.outputs[i];
-
-					for (inputKey in inputNode.instance.getInputsKey()) {
-						var input = inputNode.instance.getInput(inputKey);
-						if (input.node == nodeToReplace.instance) {
-							inputNode.instance.setInput(inputKey, inputTVar);
+				for (id in inputInfo.ids) {
+					var nodeToReplace = subShaderGraph.getNodes().get(id);
+					for (i in 0...nodeToReplace.outputs.length) {
+						var inputNode = nodeToReplace.outputs[i];
+
+						for (inputKey in inputNode.instance.getInputsKey()) {
+							var input = inputNode.instance.getInput(inputKey);
+							if (input.node == nodeToReplace.instance) {
+								inputNode.instance.setInput(inputKey, inputTVar);
+							}
 						}
 						}
 					}
 					}
 				}
 				}