浏览代码

[shgraph] Init parameters

Clément Espeute 1 年之前
父节点
当前提交
73fee13959
共有 1 个文件被更改,包括 21 次插入4 次删除
  1. 21 4
      hide/view/shadereditor/ShaderEditor.hx

+ 21 - 4
hide/view/shadereditor/ShaderEditor.hx

@@ -783,17 +783,19 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 		if (newShader == null)
 			return;
 
+		@:privateAccess
 		for (m in mesh.getMaterials()) {
 			var found = false;
 
-			for (shader in m.mainPass.getShaders()) {
-				var dyn = Std.downcast(shader, hxsl.DynamicShader);
+			var curShaderList = m.mainPass.shaders;
+			while (curShaderList != null && curShaderList != m.mainPass.parentShaders) {
+				var dyn = Std.downcast(curShaderList.s, hxsl.DynamicShader);
 				
 				@:privateAccess
 				if (dyn != null) {
 					if (dyn.shader.data.name == newShader.shader.data.name) {
 						found = true;
-						dyn.shader = newShader.shader;
+						curShaderList.s = newShader;
 						m.mainPass.resetRendererFlags();
 						m.mainPass.selfShadersChanged = true;						
 					}
@@ -813,7 +815,10 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 						m.shadows = true;
 					}
 				}
+
+				curShaderList = curShaderList.next;
 			}
+
 			if (!found) {
 				m.mainPass.addShader(newShader);
 			}
@@ -862,7 +867,12 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 			bitmap.addShader(previewShaderBase);
 			bitmap.addShader(shader);
 		}
-		setParamValue(shader, previewVar, node.getId() + 1);
+		for (init in compiledShader.inits) {
+			if (init.variable == previewVar)
+				setParamValue(shader, previewVar, node.getId() + 1);
+			else
+				setParamValue(shader, init.variable, init.value);
+		}
 	}
 
 	function setParamValue(shader : DynamicShader, variable : hxsl.Ast.TVar, value : Dynamic) {
@@ -997,6 +1007,13 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 			Ide.inst.quickMessage('shader recompiled in ${(end - start) * 1000.0} ms', 2.0);
 
 			meshShader = new hxsl.DynamicShader(compiledShader.shader);
+			for (init in compiledShader.inits) {
+				if (init.variable == previewVar)
+					setParamValue(meshShader, previewVar, 0);
+				else
+					setParamValue(meshShader, init.variable, init.value);
+			}
+
 			applyShaderMesh();
 		} catch (err) {
 			Ide.inst.quickError(err);