123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- package hrt.shgraph;
- import hide.Element;
- using hxsl.Ast;
- @:autoBuild(hrt.shgraph.ParseFieldsMacro.build())
- @:keepSub
- class ShaderNode {
- static public var current_id : Int = 0; // TODO : check concurrency
- public var id : Int = current_id++;
- static var availableVariables = [{
- parent: null,
- id: 0,
- kind: Global,
- name: "pixelColor",
- type: TVec(4, VFloat)
- }];
- var inputs : Map<String, NodeVar> = [];
- var outputs : Map<String, TVar> = [];
- public var outputCompiled : Map<String, Bool> = []; // todo: put with outputs variable
- public function setId(id : Int) {
- this.id = id;
- ShaderNode.current_id = id+1;
- }
- public function setInput(key : String, s : NodeVar) {
- if (s == null)
- inputs.remove(key);
- else
- inputs.set(key, s);
- }
- public function getInput(key : String) : NodeVar {
- return inputs.get(key);
- }
- public function getInputsKey() {
- return [for (k in inputs.keys()) k ];
- }
- public function getInputs() {
- return [for (k in inputs.keys()) inputs.get(k) ];
- }
- function addOutput(key : String, t : Type) {
- outputs.set(key, { parent: null,
- id: 0,
- kind: Local,
- name: "output_" + id + "_" + key,
- type: t
- });
- }
- function removeOutput(key : String) {
- outputs.remove(key);
- }
- function addOutputTvar(tVar : TVar) {
- outputs.set(tVar.name, tVar);
- }
- public function createOutputs() : Void {}
- public function getOutput(key : String) : TVar {
- return outputs.get(key);
- }
- public function getOutputType(key : String) : Type {
- var output = getOutput(key);
- if (output == null)
- return null;
- return output.type;
- }
- public function getOutputTExpr(key : String) : TExpr {
- var o = getOutput(key);
- return {
- e: TVar(o),
- p: null,
- t: o.type
- };
- }
- public function build(key : String) : TExpr {
- throw "Not implemented";
- }
- public function checkTypeAndCompatibilyInput(key : String, type : ShaderType.SType) : Bool {
- var infoKey = getInputInfo(key);
- if (infoKey != null && !(ShaderType.checkConversion(type, infoKey))) {
- return false;
- }
- return checkValidityInput(key, type);
- }
- public function checkValidityInput(key : String, type : ShaderType.SType) : Bool {
- return true;
- }
- public function getInputInfo(key : String) : ShaderType.SType {
- return null;
- }
- public function getOutputInfo(key : String) : ShaderType.SType {
- return null;
- }
- public function loadParameters(params : Dynamic) {
- var fields = Reflect.fields(params);
- for (f in fields) {
- Reflect.setField(this, f, Reflect.field(params, f));
- }
- }
- public function saveParameters() : Dynamic {
- var parameters = {};
- var fields = std.Type.getInstanceFields(std.Type.getClass(this));
- var metas = haxe.rtti.Meta.getFields(std.Type.getClass(this));
- for (f in fields) {
- var m = Reflect.field(metas, f);
- if (m == null) {
- continue;
- }
- if (Reflect.hasField(m, "param")) {
- Reflect.setField(parameters, f, Reflect.getProperty(this, f));
- }
- }
- return parameters;
- }
- #if editor
- public function getParametersHTML(width : Float) : Array<Element> {
- return [];
- }
- static public var registeredNodes = new Map<String, Class<ShaderNode>>();
- static public function register(key : String, cl : Class<ShaderNode>) : Bool {
- registeredNodes.set(key, cl);
- return true;
- }
- #end
- }
|