浏览代码

Fixed shader global input serialisation

Clement Espeute 1 年之前
父节点
当前提交
71cd799329
共有 2 个文件被更改,包括 8 次插入23 次删除
  1. 6 21
      hrt/shgraph/ShaderGlobalInput.hx
  2. 2 2
      hrt/shgraph/ShaderGraph.hx

+ 6 - 21
hrt/shgraph/ShaderGlobalInput.hx

@@ -8,7 +8,7 @@ using hxsl.Ast;
 @color("#0e8826")
 class ShaderGlobalInput extends ShaderNode {
 
-	@prop("Variable") public var variable : TVar = globalInputs[0];
+	@prop("Variable") public var variableIdx : Int = 0;
 
 
 	static public var globalInputs = [	{ parent: null, id: 0, kind: Global, name: "global.time", type: TFloat },
@@ -19,45 +19,30 @@ class ShaderGlobalInput extends ShaderNode {
 	override function getShaderDef():hrt.shgraph.ShaderGraph.ShaderNodeDef {
 		var pos : Position = {file: "", min: 0, max: 0};
 
-		var inVar : TVar = variable;
-		var output : TVar = {name: "output", id:1, type: this.variable.type, kind: Local, qualifiers: []};
+		var inVar : TVar = globalInputs[variableIdx];
+		var output : TVar = {name: "output", id:1, type: inVar.type, kind: Local, qualifiers: []};
 		var finalExpr : TExpr = {e: TBinop(OpAssign, {e:TVar(output), p:pos, t:output.type}, {e: TVar(inVar), p: pos, t: output.type}), p: pos, t: output.type};
 
 		return {expr: finalExpr, inVars: [], outVars:[{v: output, internal: false}], externVars: [inVar], inits: []};
 	}
 
-	override public function loadProperties(props : Dynamic) {
-		var paramVariable : String = Reflect.field(props, "variable");
-		for (c in ShaderGlobalInput.globalInputs) {
-			if (c.name == paramVariable) {
-				this.variable = c;
-				return;
-			}
-		}
-	}
-
 	#if editor
 	override public function getPropertiesHTML(width : Float) : Array<hide.Element> {
 		var elements = [];
 		var element = new hide.Element('<div style="width: 120px; height: 30px"></div>');
 		element.append(new hide.Element('<select id="variable"></select>'));
 
-		if (this.variable == null)
-			this.variable = ShaderGlobalInput.globalInputs[0];
-
 		var input = element.children("select");
-		var indexOption = 0;
-		for (c in ShaderGlobalInput.globalInputs) {
+		for (indexOption => c in ShaderGlobalInput.globalInputs) {
 			var name = c.name.split(".")[1];
 			input.append(new hide.Element('<option value="${indexOption}">${name}</option>'));
-			if (this.variable.name == c.name) {
+			if (this.variableIdx == indexOption) {
 				input.val(indexOption);
 			}
-			indexOption++;
 		}
 		input.on("change", function(e) {
 			var value = input.val();
-			this.variable = ShaderGlobalInput.globalInputs[value];
+			this.variableIdx = value;
 		});
 
 		elements.push(element);

+ 2 - 2
hrt/shgraph/ShaderGraph.hx

@@ -26,10 +26,10 @@ typedef Node = {
 };
 
 private typedef Edge = {
-	outputNodeId : Int,
+	?outputNodeId : Int,
 	nameOutput : String,
 	?outputId : Int, // Fallback if name has changed
-	inputNodeId : Int,
+	?inputNodeId : Int,
 	nameInput : String,
 	?inputId : Int, // Fallback if name has changed
 };