Преглед на файлове

Multiple outputs subgraph

Jed преди 4 години
родител
ревизия
e68b3a33ee
променени са 1 файла, в които са добавени 17 реда и са изтрити 3 реда
  1. 17 3
      hrt/shgraph/ShaderGraph.hx

+ 17 - 3
hrt/shgraph/ShaderGraph.hx

@@ -207,17 +207,18 @@ class ShaderGraph {
 			return [];
 			return [];
 		var res = [];
 		var res = [];
 		var keys = node.getInputInfoKeys();
 		var keys = node.getInputInfoKeys();
+		var alreadyBuiltNodes = [];
 		for (key in keys) {
 		for (key in keys) {
 			var input = node.getInput(key);
 			var input = node.getInput(key);
-			if (input != null) {
+			if (input != null && !alreadyBuiltNodes.contains(input.node.id)) {
 				res = res.concat(buildNodeVar(input));
 				res = res.concat(buildNodeVar(input));
+				alreadyBuiltNodes.push(input.node.id);
 			} else if (node.getInputInfo(key).hasProperty) {
 			} else if (node.getInputInfo(key).hasProperty) {
 			} else if (!node.getInputInfo(key).isRequired) {
 			} else if (!node.getInputInfo(key).isRequired) {
 			} else {
 			} else {
 				throw ShaderException.t("This box has inputs not connected", node.id);
 				throw ShaderException.t("This box has inputs not connected", node.id);
 			}
 			}
 		}
 		}
-		var build = nodeVar.getExpr();
 
 
 		var shaderInput = Std.downcast(node, ShaderInput);
 		var shaderInput = Std.downcast(node, ShaderInput);
 		if (shaderInput != null) {
 		if (shaderInput != null) {
@@ -236,8 +237,21 @@ class ShaderGraph {
 			if (parametersAvailable.exists(shaderParam.parameterId))
 			if (parametersAvailable.exists(shaderParam.parameterId))
 				allParamDefaultValue.push(getParameter(shaderParam.parameterId).defaultValue);
 				allParamDefaultValue.push(getParameter(shaderParam.parameterId).defaultValue);
 		}
 		}
-		if (isSubGraph) {
+		var build = [];
+		if (!isSubGraph)
+			build = nodeVar.getExpr();
+
+		else {
 			var subGraph = Std.downcast(node, hrt.shgraph.nodes.SubGraph);
 			var subGraph = Std.downcast(node, hrt.shgraph.nodes.SubGraph);
+			var nodeBuild = node.build("");
+			for (k in subGraph.getOutputInfoKeys()) {
+				var tvar = subGraph.getOutput(k);
+				if (tvar != null && tvar.kind == Local && ShaderInput.availableInputs.indexOf(tvar) < 0)
+					build.push({ e : TVarDecl(tvar), t : tvar.type, p : null });
+			}
+			if (nodeBuild != null)
+				build.push(nodeBuild);
+
 			var params = subGraph.subShaderGraph.parametersAvailable;
 			var params = subGraph.subShaderGraph.parametersAvailable;
 			for (subVar in subGraph.varsSubGraph) {
 			for (subVar in subGraph.varsSubGraph) {
 				if (subVar.kind == Param) {
 				if (subVar.kind == Param) {