ソースを参照

Add utility buttons and rebuild on subgraph changed

Leonardo Jeanteur 4 年 前
コミット
36afbfea2b
4 ファイル変更55 行追加3 行削除
  1. 2 0
      bin/style.css
  2. 2 0
      bin/style.less
  3. 6 0
      hide/comp/Component.hx
  4. 45 3
      hide/view/shadereditor/ShaderEditor.hx

+ 2 - 0
bin/style.css

@@ -1379,6 +1379,8 @@ input[type=checkbox]:checked:after {
   display: block;
   display: block;
   margin-bottom: 10px;
   margin-bottom: 10px;
   width: 100%;
   width: 100%;
+  text-align: center;
+  box-sizing: border-box;
 }
 }
 .graph-view .tabs .tab .options-block > div {
 .graph-view .tabs .tab .options-block > div {
   border: 1px solid #666;
   border: 1px solid #666;

+ 2 - 0
bin/style.less

@@ -1558,6 +1558,8 @@ input[type=checkbox] {
 					display: block;
 					display: block;
 					margin-bottom: 10px;
 					margin-bottom: 10px;
 					width: 100%;
 					width: 100%;
+					text-align: center;
+					box-sizing: border-box;
 				}
 				}
 
 
 				& > div {
 				& > div {

+ 6 - 0
hide/comp/Component.hx

@@ -37,4 +37,10 @@ class Component {
 		js.Browser.window.localStorage.setItem(saveDisplayKey + "/" + key, haxe.Json.stringify(value));
 		js.Browser.window.localStorage.setItem(saveDisplayKey + "/" + key, haxe.Json.stringify(value));
 	}
 	}
 
 
+	function removeDisplayState( key : String ) {
+		if( saveDisplayKey == null )
+			return;
+		js.Browser.window.localStorage.removeItem(saveDisplayKey + "/" + key);
+	}
+
 }
 }

+ 45 - 3
hide/view/shadereditor/ShaderEditor.hx

@@ -60,15 +60,19 @@ class ShaderEditor extends hide.view.Graph {
 								<input id="createParameter" type="button" value="Add parameter" />
 								<input id="createParameter" type="button" value="Add parameter" />
 								<input id="launchCompileShader" type="button" value="Compile shader" />
 								<input id="launchCompileShader" type="button" value="Compile shader" />
 								<input id="saveShader" type="button" value="Save" />
 								<input id="saveShader" type="button" value="Save" />
-								<input id="changeModel" type="button" value="Change Model" />
+								<div>
+									<input id="changeModel" type="button" value="Change Model" />
+									<input id="removeModel" type="button" value="Remove Model" />
+								</div>
 								<input id="centerView" type="button" value="Center View" />
 								<input id="centerView" type="button" value="Center View" />
-								<input id="togglelight" type="button" value="Toggle Default Lights" />
 								<div>
 								<div>
 									Display Compiled
 									Display Compiled
 									<input id="displayHxsl" type="button" value="Hxsl" />
 									<input id="displayHxsl" type="button" value="Hxsl" />
 									<input id="displayGlsl" type="button" value="Glsl" />
 									<input id="displayGlsl" type="button" value="Glsl" />
 									<input id="displayHlsl" type="button" value="Hlsl" />
 									<input id="displayHlsl" type="button" value="Hlsl" />
 								</div>
 								</div>
+								<input id="togglelight" type="button" value="Toggle Default Lights" />
+								<input id="refreshGraph" type="button" value="Refresh Shader Graph" />
 							</div>
 							</div>
 						</div>)');
 						</div>)');
 		parent.on("drop", function(e) {
 		parent.on("drop", function(e) {
@@ -155,6 +159,7 @@ class ShaderEditor extends hide.view.Graph {
 		keys.register("undo", function() undo.undo());
 		keys.register("undo", function() undo.undo());
 		keys.register("redo", function() undo.redo());
 		keys.register("redo", function() undo.redo());
 		keys.register("sceneeditor.focus", centerView);
 		keys.register("sceneeditor.focus", centerView);
+		keys.register("view.refresh", rebuild);
 
 
 		parent.on("contextmenu", function(e) {
 		parent.on("contextmenu", function(e) {
 			var elements = [];
 			var elements = [];
@@ -229,6 +234,8 @@ class ShaderEditor extends hide.view.Graph {
 			});
 			});
 		});
 		});
 
 
+		element.find("#removeModel").on("click", resetPreviewDefault);
+
 		element.find("#centerView").on("click", function() {
 		element.find("#centerView").on("click", function() {
 			centerView();
 			centerView();
 		})
 		})
@@ -236,6 +243,9 @@ class ShaderEditor extends hide.view.Graph {
 
 
 		element.find("#togglelight").on("click", toggleDefaultLight);
 		element.find("#togglelight").on("click", toggleDefaultLight);
 
 
+		element.find("#refreshGraph").on("click", rebuild)
+			.prop("title", 'Refresh the Shader (${config.get("key.view.refresh")})');
+
 		element.find("#displayHxsl").on("click", () -> displayCompiled("hxsl"));
 		element.find("#displayHxsl").on("click", () -> displayCompiled("hxsl"));
 		element.find("#displayGlsl").on("click", () -> displayCompiled("glsl"));
 		element.find("#displayGlsl").on("click", () -> displayCompiled("glsl"));
 		element.find("#displayHlsl").on("click", () -> displayCompiled("hlsl"));
 		element.find("#displayHlsl").on("click", () -> displayCompiled("hlsl"));
@@ -337,6 +347,26 @@ class ShaderEditor extends hide.view.Graph {
 		}
 		}
 	}
 	}
 
 
+	function resetPreviewDefault() {
+		sceneEditor.scene.setCurrent();
+		if( prefabObj != null ) {
+			sceneEditor.deleteElements([prefabObj], false, false);
+			prefabObj = null;
+		}
+		else {
+			sceneEditor.scene.s3d.removeChild(obj);
+		}
+		removeDisplayState("customModel");
+
+		var sp = new h3d.prim.Sphere(1, 128, 128);
+		sp.addNormals();
+		sp.addUVs();
+		obj = new h3d.scene.Mesh(sp);
+		sceneEditor.scene.s3d.addChild(obj);
+		sceneEditor.resetCamera(1.05);
+		compileShader();
+	}
+
 	function onRefresh() {
 	function onRefresh() {
 		if( obj == null ) {
 		if( obj == null ) {
 			var saveCustomModel = getDisplayState("customModel");
 			var saveCustomModel = getDisplayState("customModel");
@@ -381,7 +411,6 @@ class ShaderEditor extends hide.view.Graph {
 	}
 	}
 
 
 	function refreshShaderGraph(readyEvent : Bool = true) {
 	function refreshShaderGraph(readyEvent : Bool = true) {
-
 		listOfBoxes = [];
 		listOfBoxes = [];
 		listOfEdges = [];
 		listOfEdges = [];
 
 
@@ -412,6 +441,19 @@ class ShaderEditor extends hide.view.Graph {
 			} else {
 			} else {
 				addBox(new Point(node.x, node.y), std.Type.getClass(node.instance), node.instance);
 				addBox(new Point(node.x, node.y), std.Type.getClass(node.instance), node.instance);
 			}
 			}
+			var subGraphNode = Std.downcast(node.instance, SubGraph);
+			if( subGraphNode != null ) {
+				var found = false;
+				for( el in watches ) {
+					if( el.path == subGraphNode.pathShaderGraph ) {
+						found = true;
+						break;
+					}
+				}
+				if( !found )
+					watch(subGraphNode.pathShaderGraph, rebuild, { keepOnRebuild: false });
+				trace("watching", subGraphNode.pathShaderGraph);
+			}
 		}
 		}
 
 
 		if (readyEvent) {
 		if (readyEvent) {