|
@@ -27,13 +27,14 @@ class Preview extends ShaderNode {
|
|
|
};
|
|
|
|
|
|
}
|
|
|
- static var availableOutputs = [];
|
|
|
|
|
|
#if editor
|
|
|
public var shaderGraph : ShaderGraph;
|
|
|
+ var nodePreview : js.jquery.JQuery;
|
|
|
var cube : Mesh;
|
|
|
var scene : hide.comp.Scene;
|
|
|
- var saveShader : hxsl.DynamicShader;
|
|
|
+ var currentShaderPreview : hxsl.DynamicShader;
|
|
|
+ var currentShaderDef : hrt.prefab.ContextShared.ShaderDef;
|
|
|
public var config : hide.Config;
|
|
|
|
|
|
override public function getPropertiesHTML(width : Float) : Array<hide.Element> {
|
|
@@ -48,19 +49,22 @@ class Preview extends ShaderNode {
|
|
|
throw ShaderException.t("The preview is not available", this.id);
|
|
|
}
|
|
|
var element = new hide.Element('<div style="width: 100px; height: 90px"><div class="preview-parent" ><div class="node-preview" style="height: 100px" ></div></div></div>');
|
|
|
- scene = new hide.comp.Scene(config, null, element.find(".node-preview"));
|
|
|
- element.find(".node-preview").hide();
|
|
|
+ nodePreview = element.find(".node-preview");
|
|
|
+ scene = new hide.comp.Scene(config, null, nodePreview);
|
|
|
+ nodePreview.hide();
|
|
|
scene.onReady = function() {
|
|
|
var prim = new h3d.prim.Cube();
|
|
|
prim.addUVs();
|
|
|
prim.addNormals();
|
|
|
cube = new Mesh(prim, scene.s3d);
|
|
|
- element.find(".node-preview").removeClass("hide-scene-container");
|
|
|
- //var c = new h3d.scene.CameraController(scene.s3d);
|
|
|
- //trace(cube.getBounds());
|
|
|
- //c.setPosition(5, 0, 0);
|
|
|
- //c.setDirection(cube.getAbsPos().getPosition().sub(c.getAbsPos().getPosition()));
|
|
|
- scene.resetCamera(cube);
|
|
|
+ nodePreview.removeClass("hide-scene-container");
|
|
|
+ var c = new h3d.scene.CameraController(scene.s3d);
|
|
|
+ scene.s3d.camera.pos = new h3d.Vector(0.5, 3.4, 0.5);
|
|
|
+ scene.s3d.camera.target = new h3d.Vector(0.5, 0.5, 0.5);
|
|
|
+ var light = new h3d.scene.pbr.DirLight(scene.s3d.camera.target.sub(scene.s3d.camera.pos), scene.s3d);
|
|
|
+ light.setPosition(scene.s3d.camera.pos.x, scene.s3d.camera.pos.y, scene.s3d.camera.pos.z);
|
|
|
+ scene.s3d.camera.zoom = 1;
|
|
|
+ c.loadFromCamera();
|
|
|
scene.init();
|
|
|
onMove();
|
|
|
computeOutputs();
|
|
@@ -73,22 +77,22 @@ class Preview extends ShaderNode {
|
|
|
public function onMove(?x : Float, ?y : Float, zoom : Float = 1.) {
|
|
|
var top : Float;
|
|
|
var left : Float;
|
|
|
- var preview = new hide.Element(".node-preview");
|
|
|
- var parent = preview.parent();
|
|
|
+ var parent = nodePreview.parent();
|
|
|
if (x != null && y != null) {
|
|
|
left = x;
|
|
|
top = y;
|
|
|
} else {
|
|
|
- var offsetWindow = preview.closest(".heaps-scene").offset();
|
|
|
- var offset = preview.closest("foreignObject").offset();
|
|
|
+ var offsetWindow = nodePreview.closest(".heaps-scene").offset();
|
|
|
+ var offset = nodePreview.closest("foreignObject").offset();
|
|
|
+ if (offsetWindow == null || offset == null) return;
|
|
|
top = offset.top - offsetWindow.top - 32;
|
|
|
left = offset.left - offsetWindow.left;
|
|
|
}
|
|
|
- preview.closest(".properties-group").children().first().css("fill", "#000");
|
|
|
+ nodePreview.closest(".properties-group").children().first().css("fill", "#000");
|
|
|
parent.css("top", top/zoom + 17);
|
|
|
parent.css("left", left/zoom);
|
|
|
parent.css("zoom", zoom);
|
|
|
- preview.show();
|
|
|
+ nodePreview.show();
|
|
|
}
|
|
|
|
|
|
function onResize() {
|
|
@@ -97,20 +101,50 @@ class Preview extends ShaderNode {
|
|
|
}
|
|
|
|
|
|
override public function computeOutputs() {
|
|
|
- if (saveShader != null) {
|
|
|
+ if (currentShaderPreview != null) {
|
|
|
for (m in cube.getMaterials()) {
|
|
|
- m.mainPass.removeShader(saveShader);
|
|
|
+ m.mainPass.removeShader(currentShaderPreview);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (scene == null || input == null || input.isEmpty()) return;
|
|
|
|
|
|
scene.setCurrent();
|
|
|
- var shaderGraphDef = shaderGraph.compile(this);
|
|
|
- var shader = new hxsl.DynamicShader(shaderGraphDef.shader);
|
|
|
- for (init in shaderGraphDef.inits) {
|
|
|
- var variable = init.variable;
|
|
|
- var value : Dynamic = init.value;
|
|
|
+
|
|
|
+ var shader : hxsl.DynamicShader = null;
|
|
|
+ try {
|
|
|
+ var shaderGraphDef = shaderGraph.compile(this);
|
|
|
+ shader = new hxsl.DynamicShader(shaderGraphDef.shader);
|
|
|
+ for (init in shaderGraphDef.inits) {
|
|
|
+ setParamValue(init.variable, init.value, shader);
|
|
|
+ }
|
|
|
+ for (m in cube.getMaterials()) {
|
|
|
+ m.mainPass.addShader(shader);
|
|
|
+ }
|
|
|
+ currentShaderPreview = shader;
|
|
|
+ currentShaderDef = shaderGraphDef;
|
|
|
+ } catch(e : Dynamic) {
|
|
|
+ if (shader != null) {
|
|
|
+ for (m in cube.getMaterials()) {
|
|
|
+ m.mainPass.removeShader(shader);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function setParamValueByName(varName : String, value : Dynamic) {
|
|
|
+ if (currentShaderDef == null) return;
|
|
|
+ for (init in currentShaderDef.inits) {
|
|
|
+ if (init.variable.name == varName) {
|
|
|
+ setParamValue(init.variable, value, currentShaderPreview);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function setParamValue(variable : TVar, value : Dynamic, shader : hxsl.DynamicShader) {
|
|
|
+ scene.setCurrent();
|
|
|
+ try {
|
|
|
switch (variable.type) {
|
|
|
case TSampler2D:
|
|
|
shader.setParamValue(variable, scene.loadTexture("", value));
|
|
@@ -121,11 +155,9 @@ class Preview extends ShaderNode {
|
|
|
shader.setParamValue(variable, value);
|
|
|
}
|
|
|
}
|
|
|
+ } catch (e : Dynamic) {
|
|
|
+ // variable not used
|
|
|
}
|
|
|
- for (m in cube.getMaterials()) {
|
|
|
- m.mainPass.addShader(shader);
|
|
|
- }
|
|
|
- saveShader = shader;
|
|
|
}
|
|
|
|
|
|
#end
|