mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-02 22:37:32 +00:00
fix in roundRect
This commit is contained in:
@@ -10196,8 +10196,8 @@ LGraphNode.prototype.executeAction = function(action)
|
||||
|
||||
//API *************************************************
|
||||
//like rect but rounded corners
|
||||
if (this.CanvasRenderingContext2D) {
|
||||
CanvasRenderingContext2D.prototype.roundRect = function(
|
||||
if (global.CanvasRenderingContext2D) {
|
||||
global.CanvasRenderingContext2D.prototype.roundRect = function(
|
||||
x,
|
||||
y,
|
||||
width,
|
||||
@@ -27616,10 +27616,10 @@ LiteGraph.registerNodeType("audio/waveShaper", LGAudioWaveShaper);
|
||||
this._ws.onmessage = function(e) {
|
||||
that.boxcolor = "#AFA";
|
||||
var data = JSON.parse(e.data);
|
||||
if (data.room && data.room != this.properties.room) {
|
||||
if (data.room && data.room != that.properties.room) {
|
||||
return;
|
||||
}
|
||||
if (e.data.type == 1) {
|
||||
if (data.type == 1) {
|
||||
if (
|
||||
data.data.object_class &&
|
||||
LiteGraph[data.data.object_class]
|
||||
@@ -27635,7 +27635,7 @@ LiteGraph.registerNodeType("audio/waveShaper", LGAudioWaveShaper);
|
||||
that.triggerSlot(0, data.data);
|
||||
}
|
||||
} else {
|
||||
that._last_received_data[e.data.channel || 0] = data.data;
|
||||
that._last_received_data[data.channel || 0] = data.data;
|
||||
}
|
||||
};
|
||||
this._ws.onerror = function(e) {
|
||||
|
||||
286
build/litegraph.min.js
vendored
286
build/litegraph.min.js
vendored
@@ -28,8 +28,8 @@ c.STATUS_RUNNING){this.status=c.STATUS_RUNNING;if(this.onPlayEvent)this.onPlayEv
|
||||
b.runStep(1,!this.catch_errors);if(b.onAfterStep)b.onAfterStep()},a)}};c.prototype.stop=function(){if(this.status!=c.STATUS_STOPPED){this.status=c.STATUS_STOPPED;if(this.onStopEvent)this.onStopEvent();null!=this.execution_timer_id&&(-1!=this.execution_timer_id&&clearInterval(this.execution_timer_id),this.execution_timer_id=null);this.sendEventToAllNodes("onStop")}};c.prototype.runStep=function(a,b,d){a=a||1;var g=h.getTime();this.globaltime=0.001*(g-this.starttime);var f=this._nodes_executable?this._nodes_executable:
|
||||
this._nodes;if(f){d=d||f.length;if(b){for(var r=0;r<a;r++){for(var s=0;s<d;++s){var c=f[s];if(c.mode==h.ALWAYS&&c.onExecute)c.onExecute()}this.fixedtime+=this.fixedtime_lapse;if(this.onExecuteStep)this.onExecuteStep()}if(this.onAfterExecute)this.onAfterExecute()}else try{for(r=0;r<a;r++){for(s=0;s<d;++s)if(c=f[s],c.mode==h.ALWAYS&&c.onExecute)c.onExecute();this.fixedtime+=this.fixedtime_lapse;if(this.onExecuteStep)this.onExecuteStep()}if(this.onAfterExecute)this.onAfterExecute();this.errors_in_execution=
|
||||
!1}catch(k){this.errors_in_execution=!0;if(h.throw_errors)throw k;h.debug&&console.log("Error during execution: "+k);this.stop()}a=h.getTime();g=a-g;0==g&&(g=1);this.execution_time=0.001*g;this.globaltime+=0.001*g;this.iteration+=1;this.elapsed_time=0.001*(a-this.last_update_time);this.last_update_time=a}};c.prototype.updateExecutionOrder=function(){this._nodes_in_order=this.computeExecutionOrder(!1);this._nodes_executable=[];for(var a=0;a<this._nodes_in_order.length;++a)this._nodes_in_order[a].onExecute&&
|
||||
this._nodes_executable.push(this._nodes_in_order[a])};c.prototype.computeExecutionOrder=function(a,b){for(var d=[],g=[],f={},r={},s={},c=0,k=this._nodes.length;c<k;++c){var e=this._nodes[c];if(!a||e.onExecute){f[e.id]=e;var q=0;if(e.inputs)for(var t=0,p=e.inputs.length;t<p;t++)e.inputs[t]&&null!=e.inputs[t].link&&(q+=1);0==q?(g.push(e),b&&(e._level=1)):(b&&(e._level=0),s[e.id]=q)}}for(;0!=g.length;)if(e=g.shift(),d.push(e),delete f[e.id],e.outputs)for(c=0;c<e.outputs.length;c++)if(k=e.outputs[c],
|
||||
null!=k&&null!=k.links&&0!=k.links.length)for(t=0;t<k.links.length;t++)(q=this.links[k.links[t]])&&!r[q.id]&&(p=this.getNodeById(q.target_id),null==p?r[q.id]=!0:(b&&(!p._level||p._level<=e._level)&&(p._level=e._level+1),r[q.id]=!0,s[p.id]-=1,0==s[p.id]&&g.push(p)));for(c in f)d.push(f[c]);d.length!=this._nodes.length&&h.debug&&console.warn("something went wrong, nodes missing");k=d.length;for(c=0;c<k;++c)d[c].order=c;d=d.sort(function(a,b){var d=a.constructor.priority||a.priority||0,f=b.constructor.priority||
|
||||
this._nodes_executable.push(this._nodes_in_order[a])};c.prototype.computeExecutionOrder=function(a,b){for(var d=[],g=[],f={},r={},s={},c=0,k=this._nodes.length;c<k;++c){var e=this._nodes[c];if(!a||e.onExecute){f[e.id]=e;var p=0;if(e.inputs)for(var t=0,q=e.inputs.length;t<q;t++)e.inputs[t]&&null!=e.inputs[t].link&&(p+=1);0==p?(g.push(e),b&&(e._level=1)):(b&&(e._level=0),s[e.id]=p)}}for(;0!=g.length;)if(e=g.shift(),d.push(e),delete f[e.id],e.outputs)for(c=0;c<e.outputs.length;c++)if(k=e.outputs[c],
|
||||
null!=k&&null!=k.links&&0!=k.links.length)for(t=0;t<k.links.length;t++)(p=this.links[k.links[t]])&&!r[p.id]&&(q=this.getNodeById(p.target_id),null==q?r[p.id]=!0:(b&&(!q._level||q._level<=e._level)&&(q._level=e._level+1),r[p.id]=!0,s[q.id]-=1,0==s[q.id]&&g.push(q)));for(c in f)d.push(f[c]);d.length!=this._nodes.length&&h.debug&&console.warn("something went wrong, nodes missing");k=d.length;for(c=0;c<k;++c)d[c].order=c;d=d.sort(function(a,b){var d=a.constructor.priority||a.priority||0,f=b.constructor.priority||
|
||||
b.priority||0;return d==f?a.order-b.order:d-f});for(c=0;c<k;++c)d[c].order=c;return d};c.prototype.getAncestors=function(a){for(var b=[],d=[a],g={};d.length;){var f=d.shift();if(f.inputs){g[f.id]||f==a||(g[f.id]=!0,b.push(f));for(var h=0;h<f.inputs.length;++h){var s=f.getInputNode(h);s&&-1==b.indexOf(s)&&d.push(s)}}}b.sort(function(a,b){return a.order-b.order});return b};c.prototype.arrange=function(a){a=a||100;for(var b=this.computeExecutionOrder(!1,!0),d=[],g=0;g<b.length;++g){var f=b[g],r=f._level||
|
||||
1;d[r]||(d[r]=[]);d[r].push(f)}b=a;for(g=0;g<d.length;++g)if(r=d[g]){for(var s=100,c=a+h.NODE_TITLE_HEIGHT,k=0;k<r.length;++k)f=r[k],f.pos[0]=b,f.pos[1]=c,f.size[0]>s&&(s=f.size[0]),c+=f.size[1]+a+h.NODE_TITLE_HEIGHT;b+=s+a}this.setDirtyCanvas(!0,!0)};c.prototype.getTime=function(){return this.globaltime};c.prototype.getFixedTime=function(){return this.fixedtime};c.prototype.getElapsedTime=function(){return this.elapsed_time};c.prototype.sendEventToAllNodes=function(a,b,d){d=d||h.ALWAYS;var g=this._nodes_in_order?
|
||||
this._nodes_in_order:this._nodes;if(g)for(var f=0,r=g.length;f<r;++f){var s=g[f];if(s.constructor===h.Subgraph&&"onExecute"!=a)s.mode==d&&s.sendEventToAllNodes(a,b,d);else if(s[a]&&s.mode==d)if(void 0===b)s[a]();else if(b&&b.constructor===Array)s[a].apply(s,b);else s[a](b)}};c.prototype.sendActionToCanvas=function(a,b){if(this.list_of_graphcanvas)for(var d=0;d<this.list_of_graphcanvas.length;++d){var g=this.list_of_graphcanvas[d];g[a]&&g[a].apply(g,b)}};c.prototype.add=function(a,b){if(a)if(a.constructor===
|
||||
@@ -69,8 +69,8 @@ if(d)for(var g in d)a[g]=d[g];this.outputs||(this.outputs=[]);this.outputs.push(
|
||||
function(a){this.disconnectOutput(a);this.outputs.splice(a,1);for(var b=a;b<this.outputs.length;++b)if(this.outputs[b]&&this.outputs[b].links)for(var d=this.outputs[b].links,g=0;g<d.length;++g){var f=this.graph.links[d[g]];f&&(f.origin_slot-=1)}this.size=this.computeSize();if(this.onOutputRemoved)this.onOutputRemoved(a);this.setDirtyCanvas(!0,!0)};n.prototype.addInput=function(a,b,d){a={name:a,type:b||0,link:null};if(d)for(var g in d)a[g]=d[g];this.inputs||(this.inputs=[]);this.inputs.push(a);this.size=
|
||||
this.computeSize();if(this.onInputAdded)this.onInputAdded(a);this.setDirtyCanvas(!0,!0);return a};n.prototype.addInputs=function(a){for(var b=0;b<a.length;++b){var d=a[b],g={name:d[0],type:d[1],link:null};if(a[2])for(var f in d[2])g[f]=d[2][f];this.inputs||(this.inputs=[]);this.inputs.push(g);if(this.onInputAdded)this.onInputAdded(g)}this.size=this.computeSize();this.setDirtyCanvas(!0,!0)};n.prototype.removeInput=function(a){this.disconnectInput(a);this.inputs.splice(a,1);for(var b=a;b<this.inputs.length;++b)if(this.inputs[b]){var d=
|
||||
this.graph.links[this.inputs[b].link];d&&(d.target_slot-=1)}this.size=this.computeSize();if(this.onInputRemoved)this.onInputRemoved(a);this.setDirtyCanvas(!0,!0)};n.prototype.addConnection=function(a,b,d,g){a={name:a,type:b,pos:d,direction:g,links:null};this.connections.push(a);return a};n.prototype.computeSize=function(a,b){function d(a){return a?r*a.length*0.6:0}if(this.constructor.size)return this.constructor.size.concat();var g=Math.max(this.inputs?this.inputs.length:1,this.outputs?this.outputs.length:
|
||||
1),f=b||new Float32Array([0,0]),g=Math.max(g,1),r=h.NODE_TEXT_SIZE;f[1]=(this.constructor.slot_start_y||0)+g*h.NODE_SLOT_HEIGHT;g=0;this.widgets&&this.widgets.length&&(g=this.widgets.length*(h.NODE_WIDGET_HEIGHT+4)+8);f[1]=this.widgets_up?Math.max(f[1],g):null!=this.widgets_start_y?Math.max(f[1],g+this.widgets_start_y):f[1]+g;var g=d(this.title),s=0,c=0;if(this.inputs)for(var k=0,e=this.inputs.length;k<e;++k){var q=this.inputs[k],q=q.label||q.name||"",q=d(q);s<q&&(s=q)}if(this.outputs)for(k=0,e=this.outputs.length;k<
|
||||
e;++k)q=this.outputs[k],q=q.label||q.name||"",q=d(q),c<q&&(c=q);f[0]=Math.max(s+c+10,g);f[0]=Math.max(f[0],h.NODE_WIDTH);this.widgets&&this.widgets.length&&(f[0]=Math.max(f[0],1.5*h.NODE_WIDTH));if(this.onResize)this.onResize(f);this.constructor.min_height&&f[1]<this.constructor.min_height&&(f[1]=this.constructor.min_height);f[1]+=6;return f};n.prototype.getPropertyInfo=function(a){var b=null;if(this.properties_info)for(var d=0;d<this.properties_info.length;++d)if(this.properties_info[d].name==a){b=
|
||||
1),f=b||new Float32Array([0,0]),g=Math.max(g,1),r=h.NODE_TEXT_SIZE;f[1]=(this.constructor.slot_start_y||0)+g*h.NODE_SLOT_HEIGHT;g=0;this.widgets&&this.widgets.length&&(g=this.widgets.length*(h.NODE_WIDGET_HEIGHT+4)+8);f[1]=this.widgets_up?Math.max(f[1],g):null!=this.widgets_start_y?Math.max(f[1],g+this.widgets_start_y):f[1]+g;var g=d(this.title),s=0,c=0;if(this.inputs)for(var k=0,e=this.inputs.length;k<e;++k){var p=this.inputs[k],p=p.label||p.name||"",p=d(p);s<p&&(s=p)}if(this.outputs)for(k=0,e=this.outputs.length;k<
|
||||
e;++k)p=this.outputs[k],p=p.label||p.name||"",p=d(p),c<p&&(c=p);f[0]=Math.max(s+c+10,g);f[0]=Math.max(f[0],h.NODE_WIDTH);this.widgets&&this.widgets.length&&(f[0]=Math.max(f[0],1.5*h.NODE_WIDTH));if(this.onResize)this.onResize(f);this.constructor.min_height&&f[1]<this.constructor.min_height&&(f[1]=this.constructor.min_height);f[1]+=6;return f};n.prototype.getPropertyInfo=function(a){var b=null;if(this.properties_info)for(var d=0;d<this.properties_info.length;++d)if(this.properties_info[d].name==a){b=
|
||||
this.properties_info[d];break}this.constructor["@"+a]&&(b=this.constructor["@"+a]);this.onGetPropertyInfo&&(b=this.onGetPropertyInfo(a));b||(b={});b.type||(b.type=typeof this.properties[a]);return b};n.prototype.addWidget=function(a,b,d,g,f){this.widgets||(this.widgets=[]);!f&&g&&g.constructor===Object&&(f=g,g=null);f&&f.constructor===String&&(f={property:f});g&&g.constructor===String&&(f||(f={}),f.property=g,g=null);g&&g.constructor!==Function&&(console.warn("addWidget: callback must be a function"),
|
||||
g=null);b={type:a.toLowerCase(),name:b,value:d,callback:g,options:f||{}};void 0!==b.options.y&&(b.y=b.options.y);g||b.options.callback||b.options.property||console.warn("LiteGraph addWidget(...) without a callback or property assigned");if("combo"==a&&!b.options.values)throw"LiteGraph addWidget('combo',...) requires to pass values in options: { values:['red','blue'] }";this.widgets.push(b);this.size=this.computeSize();return b};n.prototype.addCustomWidget=function(a){this.widgets||(this.widgets=[]);
|
||||
this.widgets.push(a);return a};n.prototype.getBounding=function(a){a=a||new Float32Array(4);a[0]=this.pos[0]-4;a[1]=this.pos[1]-h.NODE_TITLE_HEIGHT;a[2]=this.size[0]+4;a[3]=this.size[1]+h.NODE_TITLE_HEIGHT;if(this.onBounding)this.onBounding(a);return a};n.prototype.isPointInside=function(a,b,d,g){d=d||0;var f=this.graph&&this.graph.isLive()?0:h.NODE_TITLE_HEIGHT;g&&(f=0);if(this.flags&&this.flags.collapsed){if(w(a,b,this.pos[0]-d,this.pos[1]-h.NODE_TITLE_HEIGHT-d,(this._collapsed_width||h.NODE_COLLAPSED_WIDTH)+
|
||||
@@ -111,8 +111,8 @@ e.getFileExtension=function(a){var b=a.indexOf("?");-1!=b&&(a=a.substr(0,b));b=a
|
||||
function(a,b){a&&(this.dirty_canvas=!0);b&&(this.dirty_bgcanvas=!0)};e.prototype.getCanvasWindow=function(){if(!this.canvas)return window;var a=this.canvas.ownerDocument;return a.defaultView||a.parentWindow};e.prototype.startRendering=function(){function a(){this.pause_rendering||this.draw();var b=this.getCanvasWindow();this.is_rendering&&b.requestAnimationFrame(a.bind(this))}this.is_rendering||(this.is_rendering=!0,a.call(this))};e.prototype.stopRendering=function(){this.is_rendering=!1};e.prototype.processMouseDown=
|
||||
function(a){if(this.graph){this.adjustMouseEvent(a);var b=this.getCanvasWindow();e.active_canvas=this;this.canvas.removeEventListener("mousemove",this._mousemove_callback);b.document.addEventListener("mousemove",this._mousemove_callback,!0);b.document.addEventListener("mouseup",this._mouseup_callback,!0);var d=this.graph.getNodeOnPos(a.canvasX,a.canvasY,this.visible_nodes,5),g=!1,f=300>h.getTime()-this.last_mouseclick;this.canvas_mouse[0]=a.canvasX;this.canvas_mouse[1]=a.canvasY;this.canvas.focus();
|
||||
h.closeAllContextMenus(b);if(!this.onMouse||!0!=this.onMouse(a)){if(1==a.which){a.ctrlKey&&(this.dragging_rectangle=new Float32Array(4),this.dragging_rectangle[0]=a.canvasX,this.dragging_rectangle[1]=a.canvasY,this.dragging_rectangle[2]=1,this.dragging_rectangle[3]=1,g=!0);var r=!1;if(d&&this.allow_interaction&&!g&&!this.read_only){this.live_mode||d.flags.pinned||this.bringToFront(d);if(!this.connecting_node&&!d.flags.collapsed&&!this.live_mode)if(!g&&!1!==d.resizable&&w(a.canvasX,a.canvasY,d.pos[0]+
|
||||
d.size[0]-5,d.pos[1]+d.size[1]-5,10,10))this.resizing_node=d,this.canvas.style.cursor="se-resize",g=!0;else{if(d.outputs)for(var s=0,c=d.outputs.length;s<c;++s){var k=d.outputs[s],q=d.getConnectionPos(!1,s);if(w(a.canvasX,a.canvasY,q[0]-15,q[1]-10,30,20)){this.connecting_node=d;this.connecting_output=k;this.connecting_pos=d.getConnectionPos(!1,s);this.connecting_slot=s;a.shiftKey&&d.disconnectOutput(s);if(f){if(d.onOutputDblClick)d.onOutputDblClick(s,a)}else if(d.onOutputClick)d.onOutputClick(s,a);
|
||||
g=!0;break}}if(d.inputs)for(s=0,c=d.inputs.length;s<c;++s)if(k=d.inputs[s],q=d.getConnectionPos(!0,s),w(a.canvasX,a.canvasY,q[0]-15,q[1]-10,30,20)){if(f){if(d.onInputDblClick)d.onInputDblClick(s,a)}else if(d.onInputClick)d.onInputClick(s,a);if(null!==k.link){g=this.graph.links[k.link];d.disconnectInput(s);if(this.allow_reconnect_links||a.shiftKey)this.connecting_node=this.graph._nodes_by_id[g.origin_id],this.connecting_slot=g.origin_slot,this.connecting_output=this.connecting_node.outputs[this.connecting_slot],
|
||||
d.size[0]-5,d.pos[1]+d.size[1]-5,10,10))this.resizing_node=d,this.canvas.style.cursor="se-resize",g=!0;else{if(d.outputs)for(var s=0,c=d.outputs.length;s<c;++s){var k=d.outputs[s],p=d.getConnectionPos(!1,s);if(w(a.canvasX,a.canvasY,p[0]-15,p[1]-10,30,20)){this.connecting_node=d;this.connecting_output=k;this.connecting_pos=d.getConnectionPos(!1,s);this.connecting_slot=s;a.shiftKey&&d.disconnectOutput(s);if(f){if(d.onOutputDblClick)d.onOutputDblClick(s,a)}else if(d.onOutputClick)d.onOutputClick(s,a);
|
||||
g=!0;break}}if(d.inputs)for(s=0,c=d.inputs.length;s<c;++s)if(k=d.inputs[s],p=d.getConnectionPos(!0,s),w(a.canvasX,a.canvasY,p[0]-15,p[1]-10,30,20)){if(f){if(d.onInputDblClick)d.onInputDblClick(s,a)}else if(d.onInputClick)d.onInputClick(s,a);if(null!==k.link){g=this.graph.links[k.link];d.disconnectInput(s);if(this.allow_reconnect_links||a.shiftKey)this.connecting_node=this.graph._nodes_by_id[g.origin_id],this.connecting_slot=g.origin_slot,this.connecting_output=this.connecting_node.outputs[this.connecting_slot],
|
||||
this.connecting_pos=this.connecting_node.getConnectionPos(!1,this.connecting_slot);g=this.dirty_bgcanvas=!0}}}if(!g){s=!1;if(c=this.processNodeWidgets(d,this.canvas_mouse,a))s=!0,this.node_widget=[d,c];if(f&&this.selected_nodes[d.id]){if(d.onDblClick)d.onDblClick(a,[a.canvasX-d.pos[0],a.canvasY-d.pos[1]],this);this.processNodeDblClicked(d);s=!0}d.onMouseDown&&d.onMouseDown(a,[a.canvasX-d.pos[0],a.canvasY-d.pos[1]],this)?s=!0:this.live_mode&&(s=r=!0);s||(this.allow_dragnodes&&(this.node_dragged=d),
|
||||
this.selected_nodes[d.id]||this.processNodeSelected(d,a));this.dirty_canvas=!0}}else{if(!this.read_only)for(s=0;s<this.visible_links.length;++s)if(d=this.visible_links[s],(r=d._pos)&&!(a.canvasX<r[0]-4||a.canvasX>r[0]+4||a.canvasY<r[1]-4||a.canvasY>r[1]+4)){this.showLinkMenu(d,a);this.over_link_center=null;break}this.selected_group=this.graph.getGroupOnPos(a.canvasX,a.canvasY);this.selected_group_resizing=!1;this.selected_group&&!this.read_only&&(a.ctrlKey&&(this.dragging_rectangle=null),10>C([a.canvasX,
|
||||
a.canvasY],[this.selected_group.pos[0]+this.selected_group.size[0],this.selected_group.pos[1]+this.selected_group.size[1]])*this.ds.scale?this.selected_group_resizing=!0:this.selected_group.recomputeInsideNodes());f&&!this.read_only&&this.allow_searchbox&&this.showSearchBox(a);r=!0}!g&&r&&this.allow_dragcanvas&&(this.dragging_canvas=!0)}else 2!=a.which&&3==a.which&&(this.read_only||this.processContextMenu(d,a));this.last_mouse[0]=a.localX;this.last_mouse[1]=a.localY;this.last_mouseclick=h.getTime();
|
||||
@@ -158,65 +158,65 @@ this._bg_img.onload=function(){h.draw(!0,!0)}}d=null;null==this._pattern&&0<this
|
||||
if(this.onDrawBackground)this.onDrawBackground(b,this.visible_area);this.onBackgroundRender&&(console.error("WARNING! onBackgroundRender deprecated, now is named onDrawBackground "),this.onBackgroundRender=null);this.render_canvas_border&&(b.strokeStyle="#235",b.strokeRect(0,0,a.width,a.height));this.render_connections_shadows?(b.shadowColor="#000",b.shadowOffsetX=0,b.shadowOffsetY=0,b.shadowBlur=6):b.shadowColor="rgba(0,0,0,0)";this.live_mode||this.drawConnections(b);b.shadowColor="rgba(0,0,0,0)";
|
||||
b.restore()}b.finish&&b.finish();this.dirty_bgcanvas=!1;this.dirty_canvas=!0};var y=new Float32Array(2);e.prototype.drawNode=function(a,b){this.current_node=a;var d=a.color||a.constructor.color||h.NODE_DEFAULT_COLOR,g=a.bgcolor||a.constructor.bgcolor||h.NODE_DEFAULT_BGCOLOR,f=0.6>this.ds.scale;if(this.live_mode){if(!a.flags.collapsed&&(b.shadowColor="transparent",a.onDrawForeground))a.onDrawForeground(b,this,this.canvas)}else{var r=this.editor_alpha;b.globalAlpha=r;this.render_shadows&&!f?(b.shadowColor=
|
||||
h.DEFAULT_SHADOW_COLOR,b.shadowOffsetX=2*this.ds.scale,b.shadowOffsetY=2*this.ds.scale,b.shadowBlur=3*this.ds.scale):b.shadowColor="transparent";if(!a.flags.collapsed||!a.onDrawCollapsed||!0!=a.onDrawCollapsed(b,this)){var s=a._shape||h.BOX_SHAPE;y.set(a.size);var c=a.horizontal;if(a.flags.collapsed){b.font=this.inner_text_font;var k=a.getTitle?a.getTitle():a.title;null!=k&&(a._collapsed_width=Math.min(a.size[0],b.measureText(k).width+2*h.NODE_TITLE_HEIGHT),y[0]=a._collapsed_width,y[1]=0)}a.clip_area&&
|
||||
(b.save(),b.beginPath(),s==h.BOX_SHAPE?b.rect(0,0,y[0],y[1]):s==h.ROUND_SHAPE?b.roundRect(0,0,y[0],y[1],10):s==h.CIRCLE_SHAPE&&b.arc(0.5*y[0],0.5*y[1],0.5*y[0],0,2*Math.PI),b.clip());a.has_errors&&(g="red");this.drawNodeShape(a,b,y,d,g,a.is_selected,a.mouseOver);b.shadowColor="transparent";if(a.onDrawForeground)a.onDrawForeground(b,this,this.canvas);b.textAlign=c?"center":"left";b.font=this.inner_text_font;g=!f;s=this.connecting_output;b.lineWidth=1;var k=0,q=new Float32Array(2);if(!a.flags.collapsed){if(a.inputs)for(d=
|
||||
0;d<a.inputs.length;d++){var e=a.inputs[d];b.globalAlpha=r;this.connecting_node&&!h.isValidConnection(e.type,s.type)&&(b.globalAlpha=0.4*r);b.fillStyle=null!=e.link?e.color_on||this.default_connection_color.input_on:e.color_off||this.default_connection_color.input_off;var t=a.getConnectionPos(!0,d,q);t[0]-=a.pos[0];t[1]-=a.pos[1];k<t[1]+0.5*h.NODE_SLOT_HEIGHT&&(k=t[1]+0.5*h.NODE_SLOT_HEIGHT);b.beginPath();e.type===h.EVENT||e.shape===h.BOX_SHAPE?c?b.rect(t[0]-5+0.5,t[1]-8+0.5,10,14):b.rect(t[0]-6+
|
||||
0.5,t[1]-5+0.5,14,10):e.shape===h.ARROW_SHAPE?(b.moveTo(t[0]+8,t[1]+0.5),b.lineTo(t[0]-4,t[1]+6+0.5),b.lineTo(t[0]-4,t[1]-6+0.5),b.closePath()):f?b.rect(t[0]-4,t[1]-4,8,8):b.arc(t[0],t[1],4,0,2*Math.PI);b.fill();if(g){var p=null!=e.label?e.label:e.name;p&&(b.fillStyle=h.NODE_TEXT_COLOR,c||e.dir==h.UP?b.fillText(p,t[0],t[1]-10):b.fillText(p,t[0]+10,t[1]+5))}}this.connecting_node&&(b.globalAlpha=0.4*r);b.textAlign=c?"center":"right";b.strokeStyle="black";if(a.outputs)for(d=0;d<a.outputs.length;d++)if(e=
|
||||
a.outputs[d],t=a.getConnectionPos(!1,d,q),t[0]-=a.pos[0],t[1]-=a.pos[1],k<t[1]+0.5*h.NODE_SLOT_HEIGHT&&(k=t[1]+0.5*h.NODE_SLOT_HEIGHT),b.fillStyle=e.links&&e.links.length?e.color_on||this.default_connection_color.output_on:e.color_off||this.default_connection_color.output_off,b.beginPath(),e.type===h.EVENT||e.shape===h.BOX_SHAPE?c?b.rect(t[0]-5+0.5,t[1]-8+0.5,10,14):b.rect(t[0]-6+0.5,t[1]-5+0.5,14,10):e.shape===h.ARROW_SHAPE?(b.moveTo(t[0]+8,t[1]+0.5),b.lineTo(t[0]-4,t[1]+6+0.5),b.lineTo(t[0]-4,t[1]-
|
||||
6+0.5),b.closePath()):f?b.rect(t[0]-4,t[1]-4,8,8):b.arc(t[0],t[1],4,0,2*Math.PI),b.fill(),f||b.stroke(),g&&(p=null!=e.label?e.label:e.name))b.fillStyle=h.NODE_TEXT_COLOR,c||e.dir==h.DOWN?b.fillText(p,t[0],t[1]-8):b.fillText(p,t[0]-10,t[1]+5);b.textAlign="left";b.globalAlpha=1;if(a.widgets){e=k;if(c||a.widgets_up)e=2;null!=a.widgets_start_y&&(e=a.widgets_start_y);this.drawNodeWidgets(a,e,b,this.node_widget&&this.node_widget[0]==a?this.node_widget[1]:null)}}else if(this.render_collapsed_slots){f=r=
|
||||
null;if(a.inputs)for(d=0;d<a.inputs.length;d++)if(e=a.inputs[d],null!=e.link){r=e;break}if(a.outputs)for(d=0;d<a.outputs.length;d++)e=a.outputs[d],e.links&&e.links.length&&(f=e);r&&(r=0,d=-0.5*h.NODE_TITLE_HEIGHT,c&&(r=0.5*a._collapsed_width,d=-h.NODE_TITLE_HEIGHT),b.fillStyle="#686",b.beginPath(),e.type===h.EVENT||e.shape===h.BOX_SHAPE?b.rect(r-7+0.5,d-4,14,8):e.shape===h.ARROW_SHAPE?(b.moveTo(r+8,d),b.lineTo(r+-4,d-4),b.lineTo(r+-4,d+4),b.closePath()):b.arc(r,d,4,0,2*Math.PI),b.fill());f&&(r=a._collapsed_width,
|
||||
d=-0.5*h.NODE_TITLE_HEIGHT,c&&(r=0.5*a._collapsed_width,d=0),b.fillStyle="#686",b.strokeStyle="black",b.beginPath(),e.type===h.EVENT||e.shape===h.BOX_SHAPE?b.rect(r-7+0.5,d-4,14,8):e.shape===h.ARROW_SHAPE?(b.moveTo(r+6,d),b.lineTo(r-6,d-4),b.lineTo(r-6,d+4),b.closePath()):b.arc(r,d,4,0,2*Math.PI),b.fill())}a.clip_area&&b.restore();b.globalAlpha=1}}};e.prototype.drawLinkTooltip=function(a,b){var d=b._pos;a.fillStyle="black";a.beginPath();a.arc(d[0],d[1],3,0,2*Math.PI);a.fill();if(null!=b.data&&(!this.onDrawLinkTooltip||
|
||||
(b.save(),b.beginPath(),s==h.BOX_SHAPE?b.rect(0,0,y[0],y[1]):s==h.ROUND_SHAPE?b.roundRect(0,0,y[0],y[1],10):s==h.CIRCLE_SHAPE&&b.arc(0.5*y[0],0.5*y[1],0.5*y[0],0,2*Math.PI),b.clip());a.has_errors&&(g="red");this.drawNodeShape(a,b,y,d,g,a.is_selected,a.mouseOver);b.shadowColor="transparent";if(a.onDrawForeground)a.onDrawForeground(b,this,this.canvas);b.textAlign=c?"center":"left";b.font=this.inner_text_font;g=!f;s=this.connecting_output;b.lineWidth=1;var k=0,e=new Float32Array(2);if(!a.flags.collapsed){if(a.inputs)for(d=
|
||||
0;d<a.inputs.length;d++){var p=a.inputs[d];b.globalAlpha=r;this.connecting_node&&!h.isValidConnection(p.type,s.type)&&(b.globalAlpha=0.4*r);b.fillStyle=null!=p.link?p.color_on||this.default_connection_color.input_on:p.color_off||this.default_connection_color.input_off;var t=a.getConnectionPos(!0,d,e);t[0]-=a.pos[0];t[1]-=a.pos[1];k<t[1]+0.5*h.NODE_SLOT_HEIGHT&&(k=t[1]+0.5*h.NODE_SLOT_HEIGHT);b.beginPath();p.type===h.EVENT||p.shape===h.BOX_SHAPE?c?b.rect(t[0]-5+0.5,t[1]-8+0.5,10,14):b.rect(t[0]-6+
|
||||
0.5,t[1]-5+0.5,14,10):p.shape===h.ARROW_SHAPE?(b.moveTo(t[0]+8,t[1]+0.5),b.lineTo(t[0]-4,t[1]+6+0.5),b.lineTo(t[0]-4,t[1]-6+0.5),b.closePath()):f?b.rect(t[0]-4,t[1]-4,8,8):b.arc(t[0],t[1],4,0,2*Math.PI);b.fill();if(g){var q=null!=p.label?p.label:p.name;q&&(b.fillStyle=h.NODE_TEXT_COLOR,c||p.dir==h.UP?b.fillText(q,t[0],t[1]-10):b.fillText(q,t[0]+10,t[1]+5))}}this.connecting_node&&(b.globalAlpha=0.4*r);b.textAlign=c?"center":"right";b.strokeStyle="black";if(a.outputs)for(d=0;d<a.outputs.length;d++)if(p=
|
||||
a.outputs[d],t=a.getConnectionPos(!1,d,e),t[0]-=a.pos[0],t[1]-=a.pos[1],k<t[1]+0.5*h.NODE_SLOT_HEIGHT&&(k=t[1]+0.5*h.NODE_SLOT_HEIGHT),b.fillStyle=p.links&&p.links.length?p.color_on||this.default_connection_color.output_on:p.color_off||this.default_connection_color.output_off,b.beginPath(),p.type===h.EVENT||p.shape===h.BOX_SHAPE?c?b.rect(t[0]-5+0.5,t[1]-8+0.5,10,14):b.rect(t[0]-6+0.5,t[1]-5+0.5,14,10):p.shape===h.ARROW_SHAPE?(b.moveTo(t[0]+8,t[1]+0.5),b.lineTo(t[0]-4,t[1]+6+0.5),b.lineTo(t[0]-4,t[1]-
|
||||
6+0.5),b.closePath()):f?b.rect(t[0]-4,t[1]-4,8,8):b.arc(t[0],t[1],4,0,2*Math.PI),b.fill(),f||b.stroke(),g&&(q=null!=p.label?p.label:p.name))b.fillStyle=h.NODE_TEXT_COLOR,c||p.dir==h.DOWN?b.fillText(q,t[0],t[1]-8):b.fillText(q,t[0]-10,t[1]+5);b.textAlign="left";b.globalAlpha=1;if(a.widgets){p=k;if(c||a.widgets_up)p=2;null!=a.widgets_start_y&&(p=a.widgets_start_y);this.drawNodeWidgets(a,p,b,this.node_widget&&this.node_widget[0]==a?this.node_widget[1]:null)}}else if(this.render_collapsed_slots){f=r=
|
||||
null;if(a.inputs)for(d=0;d<a.inputs.length;d++)if(p=a.inputs[d],null!=p.link){r=p;break}if(a.outputs)for(d=0;d<a.outputs.length;d++)p=a.outputs[d],p.links&&p.links.length&&(f=p);r&&(r=0,d=-0.5*h.NODE_TITLE_HEIGHT,c&&(r=0.5*a._collapsed_width,d=-h.NODE_TITLE_HEIGHT),b.fillStyle="#686",b.beginPath(),p.type===h.EVENT||p.shape===h.BOX_SHAPE?b.rect(r-7+0.5,d-4,14,8):p.shape===h.ARROW_SHAPE?(b.moveTo(r+8,d),b.lineTo(r+-4,d-4),b.lineTo(r+-4,d+4),b.closePath()):b.arc(r,d,4,0,2*Math.PI),b.fill());f&&(r=a._collapsed_width,
|
||||
d=-0.5*h.NODE_TITLE_HEIGHT,c&&(r=0.5*a._collapsed_width,d=0),b.fillStyle="#686",b.strokeStyle="black",b.beginPath(),p.type===h.EVENT||p.shape===h.BOX_SHAPE?b.rect(r-7+0.5,d-4,14,8):p.shape===h.ARROW_SHAPE?(b.moveTo(r+6,d),b.lineTo(r-6,d-4),b.lineTo(r-6,d+4),b.closePath()):b.arc(r,d,4,0,2*Math.PI),b.fill())}a.clip_area&&b.restore();b.globalAlpha=1}}};e.prototype.drawLinkTooltip=function(a,b){var d=b._pos;a.fillStyle="black";a.beginPath();a.arc(d[0],d[1],3,0,2*Math.PI);a.fill();if(null!=b.data&&(!this.onDrawLinkTooltip||
|
||||
!0!=this.onDrawLinkTooltip(a,b,this))){var g=b.data,f=null,f=g.constructor===Number?g.toFixed(2):g.constructor===String?'"'+g+'"':g.constructor===Boolean?String(g):g.toToolTip?g.toToolTip():"["+g.constructor.name+"]";null!=f&&(f=f.substr(0,30),a.font="14px Courier New",g=a.measureText(f).width+20,a.shadowColor="black",a.shadowOffsetX=2,a.shadowOffsetY=2,a.shadowBlur=3,a.fillStyle="#454",a.beginPath(),a.roundRect(d[0]-0.5*g,d[1]-15-24,g,24,3,3),a.moveTo(d[0]-10,d[1]-15),a.lineTo(d[0]+10,d[1]-15),a.lineTo(d[0],
|
||||
d[1]-5),a.fill(),a.shadowColor="transparent",a.textAlign="center",a.fillStyle="#CEC",a.fillText(f,d[0],d[1]-15-24*0.3))}};var v=new Float32Array(4);e.prototype.drawNodeShape=function(a,b,d,g,f,r,s){b.strokeStyle=g;b.fillStyle=f;f=h.NODE_TITLE_HEIGHT;var c=0.5>this.ds.scale,k=a._shape||a.constructor.shape||h.ROUND_SHAPE,q=a.constructor.title_mode,p=!0;q==h.TRANSPARENT_TITLE?p=!1:q==h.AUTOHIDE_TITLE&&s&&(p=!0);v[0]=0;v[1]=p?-f:0;v[2]=d[0]+1;v[3]=p?d[1]+f:d[1];s=b.globalAlpha;b.beginPath();k==h.BOX_SHAPE||
|
||||
c?b.fillRect(v[0],v[1],v[2],v[3]):k==h.ROUND_SHAPE||k==h.CARD_SHAPE?b.roundRect(v[0],v[1],v[2],v[3],this.round_radius,k==h.CARD_SHAPE?0:this.round_radius):k==h.CIRCLE_SHAPE&&b.arc(0.5*d[0],0.5*d[1],0.5*d[0],0,2*Math.PI);b.fill();a.flags.collapsed||(b.shadowColor="transparent",b.fillStyle="rgba(0,0,0,0.2)",b.fillRect(0,-1,v[2],2));b.shadowColor="transparent";if(a.onDrawBackground)a.onDrawBackground(b,this,this.canvas);if(p||q==h.TRANSPARENT_TITLE){if(a.onDrawTitleBar)a.onDrawTitleBar(b,f,d,this.ds.scale,
|
||||
g);else if(q!=h.TRANSPARENT_TITLE&&(a.constructor.title_color||this.render_title_colored)){p=a.constructor.title_color||g;a.flags.collapsed&&(b.shadowColor=h.DEFAULT_SHADOW_COLOR);if(this.use_gradients){var t=e.gradients[p];t||(t=e.gradients[p]=b.createLinearGradient(0,0,400,0),t.addColorStop(0,p),t.addColorStop(1,"#000"));b.fillStyle=t}else b.fillStyle=p;b.beginPath();k==h.BOX_SHAPE||c?b.rect(0,-f,d[0]+1,f):k!=h.ROUND_SHAPE&&k!=h.CARD_SHAPE||b.roundRect(0,-f,d[0]+1,f,this.round_radius,a.flags.collapsed?
|
||||
d[1]-5),a.fill(),a.shadowColor="transparent",a.textAlign="center",a.fillStyle="#CEC",a.fillText(f,d[0],d[1]-15-24*0.3))}};var v=new Float32Array(4);e.prototype.drawNodeShape=function(a,b,d,g,f,r,s){b.strokeStyle=g;b.fillStyle=f;f=h.NODE_TITLE_HEIGHT;var c=0.5>this.ds.scale,k=a._shape||a.constructor.shape||h.ROUND_SHAPE,p=a.constructor.title_mode,q=!0;p==h.TRANSPARENT_TITLE?q=!1:p==h.AUTOHIDE_TITLE&&s&&(q=!0);v[0]=0;v[1]=q?-f:0;v[2]=d[0]+1;v[3]=q?d[1]+f:d[1];s=b.globalAlpha;b.beginPath();k==h.BOX_SHAPE||
|
||||
c?b.fillRect(v[0],v[1],v[2],v[3]):k==h.ROUND_SHAPE||k==h.CARD_SHAPE?b.roundRect(v[0],v[1],v[2],v[3],this.round_radius,k==h.CARD_SHAPE?0:this.round_radius):k==h.CIRCLE_SHAPE&&b.arc(0.5*d[0],0.5*d[1],0.5*d[0],0,2*Math.PI);b.fill();a.flags.collapsed||(b.shadowColor="transparent",b.fillStyle="rgba(0,0,0,0.2)",b.fillRect(0,-1,v[2],2));b.shadowColor="transparent";if(a.onDrawBackground)a.onDrawBackground(b,this,this.canvas);if(q||p==h.TRANSPARENT_TITLE){if(a.onDrawTitleBar)a.onDrawTitleBar(b,f,d,this.ds.scale,
|
||||
g);else if(p!=h.TRANSPARENT_TITLE&&(a.constructor.title_color||this.render_title_colored)){q=a.constructor.title_color||g;a.flags.collapsed&&(b.shadowColor=h.DEFAULT_SHADOW_COLOR);if(this.use_gradients){var t=e.gradients[q];t||(t=e.gradients[q]=b.createLinearGradient(0,0,400,0),t.addColorStop(0,q),t.addColorStop(1,"#000"));b.fillStyle=t}else b.fillStyle=q;b.beginPath();k==h.BOX_SHAPE||c?b.rect(0,-f,d[0]+1,f):k!=h.ROUND_SHAPE&&k!=h.CARD_SHAPE||b.roundRect(0,-f,d[0]+1,f,this.round_radius,a.flags.collapsed?
|
||||
this.round_radius:0);b.fill();b.shadowColor="transparent"}if(a.onDrawTitleBox)a.onDrawTitleBox(b,f,d,this.ds.scale);else k==h.ROUND_SHAPE||k==h.CIRCLE_SHAPE||k==h.CARD_SHAPE?(c&&(b.fillStyle="black",b.beginPath(),b.arc(0.5*f,-0.5*f,6,0,2*Math.PI),b.fill()),b.fillStyle=a.boxcolor||h.NODE_DEFAULT_BOXCOLOR,c?b.fillRect(0.5*f-5,-0.5*f-5,10,10):(b.beginPath(),b.arc(0.5*f,-0.5*f,5,0,2*Math.PI),b.fill())):(c&&(b.fillStyle="black",b.fillRect(0.5*(f-10)-1,-0.5*(f+10)-1,12,12)),b.fillStyle=a.boxcolor||h.NODE_DEFAULT_BOXCOLOR,
|
||||
b.fillRect(0.5*(f-10),-0.5*(f+10),10,10));b.globalAlpha=s;if(a.onDrawTitleText)a.onDrawTitleText(b,f,d,this.ds.scale,this.title_text_font,r);!c&&(b.font=this.title_text_font,c=String(a.getTitle()))&&(b.fillStyle=r?"white":a.constructor.title_text_color||this.node_title_color,a.flags.collapsed?(b.textAlign="left",b.measureText(c),b.fillText(c.substr(0,20),f,h.NODE_TITLE_TEXT_Y-f),b.textAlign="left"):(b.textAlign="left",b.fillText(c,f,h.NODE_TITLE_TEXT_Y-f)));if(a.onDrawTitle)a.onDrawTitle(b)}if(r){if(a.onBounding)a.onBounding(v);
|
||||
q==h.TRANSPARENT_TITLE&&(v[1]-=f,v[3]+=f);b.lineWidth=1;b.globalAlpha=0.8;b.beginPath();k==h.BOX_SHAPE?b.rect(-6+v[0],-6+v[1],12+v[2],12+v[3]):k==h.ROUND_SHAPE||k==h.CARD_SHAPE&&a.flags.collapsed?b.roundRect(-6+v[0],-6+v[1],12+v[2],12+v[3],2*this.round_radius):k==h.CARD_SHAPE?b.roundRect(-6+v[0],-6+v[1],12+v[2],12+v[3],2*this.round_radius,2):k==h.CIRCLE_SHAPE&&b.arc(0.5*d[0],0.5*d[1],0.5*d[0]+6,0,2*Math.PI);b.strokeStyle="#FFF";b.stroke();b.strokeStyle=g;b.globalAlpha=1}};var G=new Float32Array(4),
|
||||
q=new Float32Array(4),p=new Float32Array(2),k=new Float32Array(2);e.prototype.drawConnections=function(a){var b=h.getTime(),d=this.visible_area;G[0]=d[0]-20;G[1]=d[1]-20;G[2]=d[2]+40;G[3]=d[3]+40;a.lineWidth=this.connections_width;a.fillStyle="#AAA";a.strokeStyle="#AAA";a.globalAlpha=this.editor_alpha;for(var d=this.graph._nodes,g=0,f=d.length;g<f;++g){var r=d[g];if(r.inputs&&r.inputs.length)for(var s=0;s<r.inputs.length;++s){var c=r.inputs[s];if(c&&null!=c.link&&(c=this.graph.links[c.link])){var e=
|
||||
this.graph.getNodeById(c.origin_id);if(null!=e){var z=c.origin_slot,l=null,l=-1==z?[e.pos[0]+10,e.pos[1]+10]:e.getConnectionPos(!1,z,p),t=r.getConnectionPos(!0,s,k);q[0]=l[0];q[1]=l[1];q[2]=t[0]-l[0];q[3]=t[1]-l[1];0>q[2]&&(q[0]+=q[2],q[2]=Math.abs(q[2]));0>q[3]&&(q[1]+=q[3],q[3]=Math.abs(q[3]));if(u(q,G)){var n=e.outputs[z],z=r.inputs[s];if(n&&z&&(e=n.dir||(e.horizontal?h.DOWN:h.RIGHT),z=z.dir||(r.horizontal?h.UP:h.LEFT),this.renderLink(a,l,t,c,!1,0,null,e,z),c&&c._last_time&&1E3>b-c._last_time)){var n=
|
||||
2-0.002*(b-c._last_time),K=a.globalAlpha;a.globalAlpha=K*n;this.renderLink(a,l,t,c,!0,n,"white",e,z);a.globalAlpha=K}}}}}}a.globalAlpha=1};e.prototype.renderLink=function(a,b,d,g,f,r,c,k,q,p){g&&this.visible_links.push(g);!c&&g&&(c=g.color||e.link_type_colors[g.type]);c||(c=this.default_link_color);null!=g&&this.highlighted_links[g.id]&&(c="#FFF");k=k||h.RIGHT;q=q||h.LEFT;var z=C(b,d);this.render_connections_border&&0.6<this.ds.scale&&(a.lineWidth=this.connections_width+4);a.lineJoin="round";p=p||
|
||||
1;1<p&&(a.lineWidth=0.5);a.beginPath();for(var t=0;t<p;t+=1){var l=5*(t-0.5*(p-1));if(this.links_render_mode==h.SPLINE_LINK){a.moveTo(b[0],b[1]+l);var n=0,y=0,u=0,m=0;switch(k){case h.LEFT:n=-0.25*z;break;case h.RIGHT:n=0.25*z;break;case h.UP:y=-0.25*z;break;case h.DOWN:y=0.25*z}switch(q){case h.LEFT:u=-0.25*z;break;case h.RIGHT:u=0.25*z;break;case h.UP:m=-0.25*z;break;case h.DOWN:m=0.25*z}a.bezierCurveTo(b[0]+n,b[1]+y+l,d[0]+u,d[1]+m+l,d[0],d[1]+l)}else if(this.links_render_mode==h.LINEAR_LINK){a.moveTo(b[0],
|
||||
b[1]+l);m=u=y=n=0;switch(k){case h.LEFT:n=-1;break;case h.RIGHT:n=1;break;case h.UP:y=-1;break;case h.DOWN:y=1}switch(q){case h.LEFT:u=-1;break;case h.RIGHT:u=1;break;case h.UP:m=-1;break;case h.DOWN:m=1}a.lineTo(b[0]+15*n,b[1]+15*y+l);a.lineTo(d[0]+15*u,d[1]+15*m+l);a.lineTo(d[0],d[1]+l)}else if(this.links_render_mode==h.STRAIGHT_LINK)a.moveTo(b[0],b[1]),l=b[0],n=b[1],y=d[0],u=d[1],k==h.RIGHT?l+=10:n+=10,q==h.LEFT?y-=10:u-=10,a.lineTo(l,n),a.lineTo(0.5*(l+y),n),a.lineTo(0.5*(l+y),u),a.lineTo(y,u),
|
||||
a.lineTo(d[0],d[1]);else return}this.render_connections_border&&0.6<this.ds.scale&&!f&&(a.strokeStyle="rgba(0,0,0,0.5)",a.stroke());a.lineWidth=this.connections_width;a.fillStyle=a.strokeStyle=c;a.stroke();f=this.computeConnectionPoint(b,d,0.5,k,q);g&&g._pos&&(g._pos[0]=f[0],g._pos[1]=f[1]);0.6<=this.ds.scale&&this.highquality_render&&q!=h.CENTER&&(this.render_connection_arrows&&(t=this.computeConnectionPoint(b,d,0.25,k,q),g=this.computeConnectionPoint(b,d,0.26,k,q),p=this.computeConnectionPoint(b,
|
||||
d,0.75,k,q),z=this.computeConnectionPoint(b,d,0.76,k,q),n=l=0,this.render_curved_connections?(l=-Math.atan2(g[0]-t[0],g[1]-t[1]),n=-Math.atan2(z[0]-p[0],z[1]-p[1])):n=l=d[1]>b[1]?0:Math.PI,a.save(),a.translate(t[0],t[1]),a.rotate(l),a.beginPath(),a.moveTo(-5,-3),a.lineTo(0,7),a.lineTo(5,-3),a.fill(),a.restore(),a.save(),a.translate(p[0],p[1]),a.rotate(n),a.beginPath(),a.moveTo(-5,-3),a.lineTo(0,7),a.lineTo(5,-3),a.fill(),a.restore()),a.beginPath(),a.arc(f[0],f[1],5,0,2*Math.PI),a.fill());if(r)for(a.fillStyle=
|
||||
c,t=0;5>t;++t)r=(0.001*h.getTime()+0.2*t)%1,f=this.computeConnectionPoint(b,d,r,k,q),a.beginPath(),a.arc(f[0],f[1],5,0,2*Math.PI),a.fill()};e.prototype.computeConnectionPoint=function(a,b,d,g,f){g=g||h.RIGHT;f=f||h.LEFT;var r=C(a,b),c=[a[0],a[1]],k=[b[0],b[1]];switch(g){case h.LEFT:c[0]+=-0.25*r;break;case h.RIGHT:c[0]+=0.25*r;break;case h.UP:c[1]+=-0.25*r;break;case h.DOWN:c[1]+=0.25*r}switch(f){case h.LEFT:k[0]+=-0.25*r;break;case h.RIGHT:k[0]+=0.25*r;break;case h.UP:k[1]+=-0.25*r;break;case h.DOWN:k[1]+=
|
||||
p==h.TRANSPARENT_TITLE&&(v[1]-=f,v[3]+=f);b.lineWidth=1;b.globalAlpha=0.8;b.beginPath();k==h.BOX_SHAPE?b.rect(-6+v[0],-6+v[1],12+v[2],12+v[3]):k==h.ROUND_SHAPE||k==h.CARD_SHAPE&&a.flags.collapsed?b.roundRect(-6+v[0],-6+v[1],12+v[2],12+v[3],2*this.round_radius):k==h.CARD_SHAPE?b.roundRect(-6+v[0],-6+v[1],12+v[2],12+v[3],2*this.round_radius,2):k==h.CIRCLE_SHAPE&&b.arc(0.5*d[0],0.5*d[1],0.5*d[0]+6,0,2*Math.PI);b.strokeStyle="#FFF";b.stroke();b.strokeStyle=g;b.globalAlpha=1}};var G=new Float32Array(4),
|
||||
p=new Float32Array(4),q=new Float32Array(2),k=new Float32Array(2);e.prototype.drawConnections=function(a){var b=h.getTime(),d=this.visible_area;G[0]=d[0]-20;G[1]=d[1]-20;G[2]=d[2]+40;G[3]=d[3]+40;a.lineWidth=this.connections_width;a.fillStyle="#AAA";a.strokeStyle="#AAA";a.globalAlpha=this.editor_alpha;for(var d=this.graph._nodes,g=0,f=d.length;g<f;++g){var r=d[g];if(r.inputs&&r.inputs.length)for(var s=0;s<r.inputs.length;++s){var c=r.inputs[s];if(c&&null!=c.link&&(c=this.graph.links[c.link])){var e=
|
||||
this.graph.getNodeById(c.origin_id);if(null!=e){var z=c.origin_slot,l=null,l=-1==z?[e.pos[0]+10,e.pos[1]+10]:e.getConnectionPos(!1,z,q),t=r.getConnectionPos(!0,s,k);p[0]=l[0];p[1]=l[1];p[2]=t[0]-l[0];p[3]=t[1]-l[1];0>p[2]&&(p[0]+=p[2],p[2]=Math.abs(p[2]));0>p[3]&&(p[1]+=p[3],p[3]=Math.abs(p[3]));if(u(p,G)){var n=e.outputs[z],z=r.inputs[s];if(n&&z&&(e=n.dir||(e.horizontal?h.DOWN:h.RIGHT),z=z.dir||(r.horizontal?h.UP:h.LEFT),this.renderLink(a,l,t,c,!1,0,null,e,z),c&&c._last_time&&1E3>b-c._last_time)){var n=
|
||||
2-0.002*(b-c._last_time),K=a.globalAlpha;a.globalAlpha=K*n;this.renderLink(a,l,t,c,!0,n,"white",e,z);a.globalAlpha=K}}}}}}a.globalAlpha=1};e.prototype.renderLink=function(a,b,d,g,f,r,c,k,p,q){g&&this.visible_links.push(g);!c&&g&&(c=g.color||e.link_type_colors[g.type]);c||(c=this.default_link_color);null!=g&&this.highlighted_links[g.id]&&(c="#FFF");k=k||h.RIGHT;p=p||h.LEFT;var z=C(b,d);this.render_connections_border&&0.6<this.ds.scale&&(a.lineWidth=this.connections_width+4);a.lineJoin="round";q=q||
|
||||
1;1<q&&(a.lineWidth=0.5);a.beginPath();for(var t=0;t<q;t+=1){var l=5*(t-0.5*(q-1));if(this.links_render_mode==h.SPLINE_LINK){a.moveTo(b[0],b[1]+l);var n=0,y=0,u=0,m=0;switch(k){case h.LEFT:n=-0.25*z;break;case h.RIGHT:n=0.25*z;break;case h.UP:y=-0.25*z;break;case h.DOWN:y=0.25*z}switch(p){case h.LEFT:u=-0.25*z;break;case h.RIGHT:u=0.25*z;break;case h.UP:m=-0.25*z;break;case h.DOWN:m=0.25*z}a.bezierCurveTo(b[0]+n,b[1]+y+l,d[0]+u,d[1]+m+l,d[0],d[1]+l)}else if(this.links_render_mode==h.LINEAR_LINK){a.moveTo(b[0],
|
||||
b[1]+l);m=u=y=n=0;switch(k){case h.LEFT:n=-1;break;case h.RIGHT:n=1;break;case h.UP:y=-1;break;case h.DOWN:y=1}switch(p){case h.LEFT:u=-1;break;case h.RIGHT:u=1;break;case h.UP:m=-1;break;case h.DOWN:m=1}a.lineTo(b[0]+15*n,b[1]+15*y+l);a.lineTo(d[0]+15*u,d[1]+15*m+l);a.lineTo(d[0],d[1]+l)}else if(this.links_render_mode==h.STRAIGHT_LINK)a.moveTo(b[0],b[1]),l=b[0],n=b[1],y=d[0],u=d[1],k==h.RIGHT?l+=10:n+=10,p==h.LEFT?y-=10:u-=10,a.lineTo(l,n),a.lineTo(0.5*(l+y),n),a.lineTo(0.5*(l+y),u),a.lineTo(y,u),
|
||||
a.lineTo(d[0],d[1]);else return}this.render_connections_border&&0.6<this.ds.scale&&!f&&(a.strokeStyle="rgba(0,0,0,0.5)",a.stroke());a.lineWidth=this.connections_width;a.fillStyle=a.strokeStyle=c;a.stroke();f=this.computeConnectionPoint(b,d,0.5,k,p);g&&g._pos&&(g._pos[0]=f[0],g._pos[1]=f[1]);0.6<=this.ds.scale&&this.highquality_render&&p!=h.CENTER&&(this.render_connection_arrows&&(t=this.computeConnectionPoint(b,d,0.25,k,p),g=this.computeConnectionPoint(b,d,0.26,k,p),q=this.computeConnectionPoint(b,
|
||||
d,0.75,k,p),z=this.computeConnectionPoint(b,d,0.76,k,p),n=l=0,this.render_curved_connections?(l=-Math.atan2(g[0]-t[0],g[1]-t[1]),n=-Math.atan2(z[0]-q[0],z[1]-q[1])):n=l=d[1]>b[1]?0:Math.PI,a.save(),a.translate(t[0],t[1]),a.rotate(l),a.beginPath(),a.moveTo(-5,-3),a.lineTo(0,7),a.lineTo(5,-3),a.fill(),a.restore(),a.save(),a.translate(q[0],q[1]),a.rotate(n),a.beginPath(),a.moveTo(-5,-3),a.lineTo(0,7),a.lineTo(5,-3),a.fill(),a.restore()),a.beginPath(),a.arc(f[0],f[1],5,0,2*Math.PI),a.fill());if(r)for(a.fillStyle=
|
||||
c,t=0;5>t;++t)r=(0.001*h.getTime()+0.2*t)%1,f=this.computeConnectionPoint(b,d,r,k,p),a.beginPath(),a.arc(f[0],f[1],5,0,2*Math.PI),a.fill()};e.prototype.computeConnectionPoint=function(a,b,d,g,f){g=g||h.RIGHT;f=f||h.LEFT;var r=C(a,b),c=[a[0],a[1]],k=[b[0],b[1]];switch(g){case h.LEFT:c[0]+=-0.25*r;break;case h.RIGHT:c[0]+=0.25*r;break;case h.UP:c[1]+=-0.25*r;break;case h.DOWN:c[1]+=0.25*r}switch(f){case h.LEFT:k[0]+=-0.25*r;break;case h.RIGHT:k[0]+=0.25*r;break;case h.UP:k[1]+=-0.25*r;break;case h.DOWN:k[1]+=
|
||||
0.25*r}g=(1-d)*(1-d)*(1-d);f=3*(1-d)*(1-d)*d;r=3*(1-d)*d*d;d*=d*d;return[g*a[0]+f*c[0]+r*k[0]+d*b[0],g*a[1]+f*c[1]+r*k[1]+d*b[1]]};e.prototype.drawExecutionOrder=function(a){a.shadowColor="transparent";a.globalAlpha=0.25;a.textAlign="center";a.strokeStyle="white";a.globalAlpha=0.75;for(var b=this.visible_nodes,d=0;d<b.length;++d){var g=b[d];a.fillStyle="black";a.fillRect(g.pos[0]-h.NODE_TITLE_HEIGHT,g.pos[1]-h.NODE_TITLE_HEIGHT,h.NODE_TITLE_HEIGHT,h.NODE_TITLE_HEIGHT);0==g.order&&a.strokeRect(g.pos[0]-
|
||||
h.NODE_TITLE_HEIGHT+0.5,g.pos[1]-h.NODE_TITLE_HEIGHT+0.5,h.NODE_TITLE_HEIGHT,h.NODE_TITLE_HEIGHT);a.fillStyle="#FFF";a.fillText(g.order,g.pos[0]+-0.5*h.NODE_TITLE_HEIGHT,g.pos[1]-6)}a.globalAlpha=1};e.prototype.drawNodeWidgets=function(a,b,d,g){if(!a.widgets||!a.widgets.length)return 0;var f=a.size[0],r=a.widgets;b+=2;var c=h.NODE_WIDGET_HEIGHT,k=0.5<this.ds.scale;d.save();d.globalAlpha=this.editor_alpha;for(var e=h.WIDGET_OUTLINE_COLOR,q=h.WIDGET_BGCOLOR,p=h.WIDGET_TEXT_COLOR,t=h.WIDGET_SECONDARY_TEXT_COLOR,
|
||||
z=0;z<r.length;++z){var l=r[z],n=b;l.y&&(n=l.y);l.last_y=n;d.strokeStyle=e;d.fillStyle="#222";d.textAlign="left";l.disabled&&(d.globalAlpha*=0.5);switch(l.type){case "button":l.clicked&&(d.fillStyle="#AAA",l.clicked=!1,this.dirty_canvas=!0);d.fillRect(15,n,f-30,c);k&&d.strokeRect(15,n,f-30,c);k&&(d.textAlign="center",d.fillStyle=p,d.fillText(l.name,0.5*f,n+0.7*c));break;case "toggle":d.textAlign="left";d.strokeStyle=e;d.fillStyle=q;d.beginPath();k?d.roundRect(15,b,f-30,c,0.5*c):d.rect(15,b,f-30,c);
|
||||
d.fill();k&&d.stroke();d.fillStyle=l.value?"#89A":"#333";d.beginPath();d.arc(f-30,n+0.5*c,0.36*c,0,2*Math.PI);d.fill();k&&(d.fillStyle=t,null!=l.name&&d.fillText(l.name,30,n+0.7*c),d.fillStyle=l.value?p:t,d.textAlign="right",d.fillText(l.value?l.options.on||"true":l.options.off||"false",f-40,n+0.7*c));break;case "slider":d.fillStyle=q;d.fillRect(15,n,f-30,c);var y=l.options.max-l.options.min,u=(l.value-l.options.min)/y;d.fillStyle=g==l?"#89A":"#678";d.fillRect(15,n,u*(f-30),c);k&&d.strokeRect(15,
|
||||
n,f-30,c);l.marker&&(y=(l.marker-l.options.min)/y,d.fillStyle="#AA9",d.fillRect(15+y*(f-30),n,2,c));k&&(d.textAlign="center",d.fillStyle=p,d.fillText(l.name+" "+Number(l.value).toFixed(3),0.5*f,n+0.7*c));break;case "number":case "combo":d.textAlign="left";d.strokeStyle=e;d.fillStyle=q;d.beginPath();k?d.roundRect(15,b,f-30,c,0.5*c):d.rect(15,b,f-30,c);d.fill();k&&(d.stroke(),d.fillStyle=p,d.beginPath(),d.moveTo(31,b+5),d.lineTo(21,b+0.5*c),d.lineTo(31,b+c-5),d.fill(),d.beginPath(),d.moveTo(f-15-16,
|
||||
b+5),d.lineTo(f-15-6,b+0.5*c),d.lineTo(f-15-16,b+c-5),d.fill(),d.fillStyle=t,d.fillText(l.name,35,n+0.7*c),d.fillStyle=p,d.textAlign="right","number"==l.type?d.fillText(Number(l.value).toFixed(void 0!==l.options.precision?l.options.precision:3),f-30-20,n+0.7*c):(y=l.value,l.options.values&&(u=l.options.values,u.constructor===Function&&(u=u()),u&&u.constructor!==Array&&(y=u[l.value])),d.fillText(y,f-30-20,n+0.7*c)));break;case "string":case "text":d.textAlign="left";d.strokeStyle=e;d.fillStyle=q;d.beginPath();
|
||||
k?d.roundRect(15,b,f-30,c,0.5*c):d.rect(15,b,f-30,c);d.fill();k&&(d.save(),d.beginPath(),d.rect(15,b,f-30,c),d.clip(),d.stroke(),d.fillStyle=t,null!=l.name&&d.fillText(l.name,30,n+0.7*c),d.fillStyle=p,d.textAlign="right",d.fillText(String(l.value).substr(0,30),f-30,n+0.7*c),d.restore());break;default:l.draw&&l.draw(d,a,l,n,c)}b+=c+4;d.globalAlpha=this.editor_alpha}d.restore();d.textAlign="left"};e.prototype.processNodeWidgets=function(a,b,d,g){function f(f,g){f.value=g;f.options&&f.options.property&&
|
||||
void 0!==a.properties[f.options.property]&&a.setProperty(f.options.property,g);f.callback&&f.callback(f.value,e,a,b,d)}if(!a.widgets||!a.widgets.length)return null;for(var c=b[0]-a.pos[0],s=b[1]-a.pos[1],k=a.size[0],e=this,q=this.getCanvasWindow(),p=0;p<a.widgets.length;++p){var t=a.widgets[p];if(t&&!t.disabled&&(t==g||6<c&&c<k-12&&s>t.last_y&&s<t.last_y+h.NODE_WIDGET_HEIGHT)){switch(t.type){case "button":if("mousemove"===d.type)break;t.callback&&setTimeout(function(){t.callback(t,e,a,b,d)},20);this.dirty_canvas=
|
||||
t.clicked=!0;break;case "slider":q=Math.clamp((c-10)/(k-20),0,1);t.value=t.options.min+(t.options.max-t.options.min)*q;t.callback&&setTimeout(function(){f(t,t.value)},20);this.dirty_canvas=!0;break;case "number":case "combo":g=t.value;if("mousemove"==d.type&&"number"==t.type)t.value+=0.1*d.deltaX*(t.options.step||1),null!=t.options.min&&t.value<t.options.min&&(t.value=t.options.min),null!=t.options.max&&t.value>t.options.max&&(t.value=t.options.max);else if("mousedown"==d.type){var l=t.options.values;
|
||||
l&&l.constructor===Function&&(l=t.options.values(t,a));var z=null;"number"!=t.type&&(z=l.constructor===Array?l:Object.keys(l));c=40>c?-1:c>k-40?1:0;if("number"==t.type)t.value+=0.1*c*(t.options.step||1),null!=t.options.min&&t.value<t.options.min&&(t.value=t.options.min),null!=t.options.max&&t.value>t.options.max&&(t.value=t.options.max);else if(c)q=-1,q=l.constructor===Object?z.indexOf(String(t.value))+c:z.indexOf(t.value)+c,q>=z.length&&(q=z.length-1),0>q&&(q=0),t.value=l.constructor===Array?l[q]:
|
||||
q;else{var n=l!=z?Object.values(l):l;new h.ContextMenu(n,{scale:Math.max(1,this.ds.scale),event:d,className:"dark",callback:y.bind(t)},q);var y=function(a,b,d){l!=z&&(a=n.indexOf(a));this.value=a;f(this,a);e.dirty_canvas=!0;return!1}}}else"mouseup"==d.type&&"number"==t.type&&(c=40>c?-1:c>k-40?1:0,200>d.click_time&&0==c&&this.prompt("Value",t.value,function(a){this.value=Number(a);f(this,this.value)}.bind(t),d));g!=t.value&&setTimeout(function(){f(this,this.value)}.bind(t),20);this.dirty_canvas=!0;
|
||||
h.NODE_TITLE_HEIGHT+0.5,g.pos[1]-h.NODE_TITLE_HEIGHT+0.5,h.NODE_TITLE_HEIGHT,h.NODE_TITLE_HEIGHT);a.fillStyle="#FFF";a.fillText(g.order,g.pos[0]+-0.5*h.NODE_TITLE_HEIGHT,g.pos[1]-6)}a.globalAlpha=1};e.prototype.drawNodeWidgets=function(a,b,d,g){if(!a.widgets||!a.widgets.length)return 0;var f=a.size[0],r=a.widgets;b+=2;var c=h.NODE_WIDGET_HEIGHT,k=0.5<this.ds.scale;d.save();d.globalAlpha=this.editor_alpha;for(var p=h.WIDGET_OUTLINE_COLOR,e=h.WIDGET_BGCOLOR,q=h.WIDGET_TEXT_COLOR,t=h.WIDGET_SECONDARY_TEXT_COLOR,
|
||||
z=0;z<r.length;++z){var l=r[z],n=b;l.y&&(n=l.y);l.last_y=n;d.strokeStyle=p;d.fillStyle="#222";d.textAlign="left";l.disabled&&(d.globalAlpha*=0.5);switch(l.type){case "button":l.clicked&&(d.fillStyle="#AAA",l.clicked=!1,this.dirty_canvas=!0);d.fillRect(15,n,f-30,c);k&&d.strokeRect(15,n,f-30,c);k&&(d.textAlign="center",d.fillStyle=q,d.fillText(l.name,0.5*f,n+0.7*c));break;case "toggle":d.textAlign="left";d.strokeStyle=p;d.fillStyle=e;d.beginPath();k?d.roundRect(15,b,f-30,c,0.5*c):d.rect(15,b,f-30,c);
|
||||
d.fill();k&&d.stroke();d.fillStyle=l.value?"#89A":"#333";d.beginPath();d.arc(f-30,n+0.5*c,0.36*c,0,2*Math.PI);d.fill();k&&(d.fillStyle=t,null!=l.name&&d.fillText(l.name,30,n+0.7*c),d.fillStyle=l.value?q:t,d.textAlign="right",d.fillText(l.value?l.options.on||"true":l.options.off||"false",f-40,n+0.7*c));break;case "slider":d.fillStyle=e;d.fillRect(15,n,f-30,c);var y=l.options.max-l.options.min,u=(l.value-l.options.min)/y;d.fillStyle=g==l?"#89A":"#678";d.fillRect(15,n,u*(f-30),c);k&&d.strokeRect(15,
|
||||
n,f-30,c);l.marker&&(y=(l.marker-l.options.min)/y,d.fillStyle="#AA9",d.fillRect(15+y*(f-30),n,2,c));k&&(d.textAlign="center",d.fillStyle=q,d.fillText(l.name+" "+Number(l.value).toFixed(3),0.5*f,n+0.7*c));break;case "number":case "combo":d.textAlign="left";d.strokeStyle=p;d.fillStyle=e;d.beginPath();k?d.roundRect(15,b,f-30,c,0.5*c):d.rect(15,b,f-30,c);d.fill();k&&(d.stroke(),d.fillStyle=q,d.beginPath(),d.moveTo(31,b+5),d.lineTo(21,b+0.5*c),d.lineTo(31,b+c-5),d.fill(),d.beginPath(),d.moveTo(f-15-16,
|
||||
b+5),d.lineTo(f-15-6,b+0.5*c),d.lineTo(f-15-16,b+c-5),d.fill(),d.fillStyle=t,d.fillText(l.name,35,n+0.7*c),d.fillStyle=q,d.textAlign="right","number"==l.type?d.fillText(Number(l.value).toFixed(void 0!==l.options.precision?l.options.precision:3),f-30-20,n+0.7*c):(y=l.value,l.options.values&&(u=l.options.values,u.constructor===Function&&(u=u()),u&&u.constructor!==Array&&(y=u[l.value])),d.fillText(y,f-30-20,n+0.7*c)));break;case "string":case "text":d.textAlign="left";d.strokeStyle=p;d.fillStyle=e;d.beginPath();
|
||||
k?d.roundRect(15,b,f-30,c,0.5*c):d.rect(15,b,f-30,c);d.fill();k&&(d.save(),d.beginPath(),d.rect(15,b,f-30,c),d.clip(),d.stroke(),d.fillStyle=t,null!=l.name&&d.fillText(l.name,30,n+0.7*c),d.fillStyle=q,d.textAlign="right",d.fillText(String(l.value).substr(0,30),f-30,n+0.7*c),d.restore());break;default:l.draw&&l.draw(d,a,l,n,c)}b+=c+4;d.globalAlpha=this.editor_alpha}d.restore();d.textAlign="left"};e.prototype.processNodeWidgets=function(a,b,d,g){function f(f,g){f.value=g;f.options&&f.options.property&&
|
||||
void 0!==a.properties[f.options.property]&&a.setProperty(f.options.property,g);f.callback&&f.callback(f.value,p,a,b,d)}if(!a.widgets||!a.widgets.length)return null;for(var c=b[0]-a.pos[0],s=b[1]-a.pos[1],k=a.size[0],p=this,e=this.getCanvasWindow(),q=0;q<a.widgets.length;++q){var t=a.widgets[q];if(t&&!t.disabled&&(t==g||6<c&&c<k-12&&s>t.last_y&&s<t.last_y+h.NODE_WIDGET_HEIGHT)){switch(t.type){case "button":if("mousemove"===d.type)break;t.callback&&setTimeout(function(){t.callback(t,p,a,b,d)},20);this.dirty_canvas=
|
||||
t.clicked=!0;break;case "slider":e=Math.clamp((c-10)/(k-20),0,1);t.value=t.options.min+(t.options.max-t.options.min)*e;t.callback&&setTimeout(function(){f(t,t.value)},20);this.dirty_canvas=!0;break;case "number":case "combo":g=t.value;if("mousemove"==d.type&&"number"==t.type)t.value+=0.1*d.deltaX*(t.options.step||1),null!=t.options.min&&t.value<t.options.min&&(t.value=t.options.min),null!=t.options.max&&t.value>t.options.max&&(t.value=t.options.max);else if("mousedown"==d.type){var l=t.options.values;
|
||||
l&&l.constructor===Function&&(l=t.options.values(t,a));var z=null;"number"!=t.type&&(z=l.constructor===Array?l:Object.keys(l));c=40>c?-1:c>k-40?1:0;if("number"==t.type)t.value+=0.1*c*(t.options.step||1),null!=t.options.min&&t.value<t.options.min&&(t.value=t.options.min),null!=t.options.max&&t.value>t.options.max&&(t.value=t.options.max);else if(c)e=-1,e=l.constructor===Object?z.indexOf(String(t.value))+c:z.indexOf(t.value)+c,e>=z.length&&(e=z.length-1),0>e&&(e=0),t.value=l.constructor===Array?l[e]:
|
||||
e;else{var n=l!=z?Object.values(l):l;new h.ContextMenu(n,{scale:Math.max(1,this.ds.scale),event:d,className:"dark",callback:y.bind(t)},e);var y=function(a,b,d){l!=z&&(a=n.indexOf(a));this.value=a;f(this,a);p.dirty_canvas=!0;return!1}}}else"mouseup"==d.type&&"number"==t.type&&(c=40>c?-1:c>k-40?1:0,200>d.click_time&&0==c&&this.prompt("Value",t.value,function(a){this.value=Number(a);f(this,this.value)}.bind(t),d));g!=t.value&&setTimeout(function(){f(this,this.value)}.bind(t),20);this.dirty_canvas=!0;
|
||||
break;case "toggle":"mousedown"==d.type&&(t.value=!t.value,setTimeout(function(){f(t,t.value)},20));break;case "string":case "text":"mousedown"==d.type&&this.prompt("Value",t.value,function(a){this.value=a;f(this,a)}.bind(t),d);break;default:t.mouse&&t.mouse(ctx,d,[c,s],a)}return t}}return null};e.prototype.drawGroups=function(a,b){if(this.graph){var d=this.graph._groups;b.save();b.globalAlpha=0.5*this.editor_alpha;for(var g=0;g<d.length;++g){var f=d[g];if(u(this.visible_area,f._bounding)){b.fillStyle=
|
||||
f.color||"#335";b.strokeStyle=f.color||"#335";var c=f._pos,s=f._size;b.globalAlpha=0.25*this.editor_alpha;b.beginPath();b.rect(c[0]+0.5,c[1]+0.5,s[0],s[1]);b.fill();b.globalAlpha=this.editor_alpha;b.stroke();b.beginPath();b.moveTo(c[0]+s[0],c[1]+s[1]);b.lineTo(c[0]+s[0]-10,c[1]+s[1]);b.lineTo(c[0]+s[0],c[1]+s[1]-10);b.fill();s=f.font_size||h.DEFAULT_GROUP_FONT_SIZE;b.font=s+"px Arial";b.fillText(f.title,c[0]+4,c[1]+s)}}b.restore()}};e.prototype.adjustNodesSize=function(){for(var a=this.graph._nodes,
|
||||
b=0;b<a.length;++b)a[b].size=a[b].computeSize();this.setDirty(!0,!0)};e.prototype.resize=function(a,b){if(!a&&!b){var d=this.canvas.parentNode;a=d.offsetWidth;b=d.offsetHeight}if(this.canvas.width!=a||this.canvas.height!=b)this.canvas.width=a,this.canvas.height=b,this.bgcanvas.width=this.canvas.width,this.bgcanvas.height=this.canvas.height,this.setDirty(!0,!0)};e.prototype.switchLiveMode=function(a){if(a){var b=this,d=this.live_mode?1.1:0.9;this.live_mode&&(this.live_mode=!1,this.editor_alpha=0.1);
|
||||
var g=setInterval(function(){b.editor_alpha*=d;b.dirty_canvas=!0;b.dirty_bgcanvas=!0;1>d&&0.01>b.editor_alpha&&(clearInterval(g),1>d&&(b.live_mode=!0));1<d&&0.99<b.editor_alpha&&(clearInterval(g),b.editor_alpha=1)},1)}else this.live_mode=!this.live_mode,this.dirty_bgcanvas=this.dirty_canvas=!0};e.prototype.onNodeSelectionChange=function(a){};e.prototype.touchHandler=function(a){var b=a.changedTouches[0],d="";switch(a.type){case "touchstart":d="mousedown";break;case "touchmove":d="mousemove";break;
|
||||
case "touchend":d="mouseup";break;default:return}var g=this.getCanvasWindow(),f=g.document.createEvent("MouseEvent");f.initMouseEvent(d,!0,!0,g,1,b.screenX,b.screenY,b.clientX,b.clientY,!1,!1,!1,!1,0,null);b.target.dispatchEvent(f);a.preventDefault()};e.onGroupAdd=function(a,b,d){a=e.active_canvas;a.getCanvasWindow();b=new h.LGraphGroup;b.pos=a.convertEventToCanvasOffset(d);a.graph.add(b)};e.onMenuAdd=function(a,b,d,g,f){function c(a,b){var d=g.getFirstEvent(),r=h.createNode(a.value);r&&(r.pos=s.convertEventToCanvasOffset(d),
|
||||
s.graph.add(r));f&&f(r)}var s=e.active_canvas,k=s.getCanvasWindow();a=h.getNodeTypesCategories(s.filter);b=[];for(var q in a)a[q]&&b.push({value:a[q],content:a[q],has_submenu:!0});var p=new h.ContextMenu(b,{event:d,callback:function(a,b,d){a=h.getNodeTypesInCategory(a.value,s.filter);b=[];for(var f in a)a[f].skip_list||b.push({content:a[f].title,value:a[f].type});new h.ContextMenu(b,{event:d,callback:c,parentMenu:p},k);return!1},parentMenu:g},k);return!1};e.onMenuCollapseAll=function(){};e.onMenuNodeEdit=
|
||||
function(){};e.showMenuNodeOptionalInputs=function(a,b,d,g,f){function c(a,b,d){f&&(a.callback&&a.callback.call(s,f,a,b,d),a.value&&(f.addInput(a.value[0],a.value[1],a.value[2]),f.setDirtyCanvas(!0,!0)))}if(f){var s=this;a=e.active_canvas.getCanvasWindow();b=f.optional_inputs;f.onGetInputs&&(b=f.onGetInputs());var k=[];if(b)for(var q in b){var p=b[q];if(p){var l=p[0];p[2]&&p[2].label&&(l=p[2].label);l={content:l,value:p};p[1]==h.ACTION&&(l.className="event");k.push(l)}else k.push(null)}this.onMenuNodeInputs&&
|
||||
(k=this.onMenuNodeInputs(k));if(k.length)return new h.ContextMenu(k,{event:d,callback:c,parentMenu:g,node:f},a),!1}};e.showMenuNodeOptionalOutputs=function(a,b,d,g,f){function c(a,b,d){if(f&&(a.callback&&a.callback.call(k,f,a,b,d),a.value))if(d=a.value[1],!d||d.constructor!==Object&&d.constructor!==Array)f.addOutput(a.value[0],a.value[1],a.value[2]),f.setDirtyCanvas(!0,!0);else{a=[];for(var e in d)a.push({content:e,value:d[e]});new h.ContextMenu(a,{event:b,callback:c,parentMenu:g,node:f});return!1}}
|
||||
if(f){var k=this;a=e.active_canvas.getCanvasWindow();b=f.optional_outputs;f.onGetOutputs&&(b=f.onGetOutputs());var q=[];if(b)for(var p in b){var l=b[p];if(!l)q.push(null);else if(!f.flags||!f.flags.skip_repeated_outputs||-1==f.findOutputSlot(l[0])){var z=l[0];l[2]&&l[2].label&&(z=l[2].label);z={content:z,value:l};l[1]==h.EVENT&&(z.className="event");q.push(z)}}this.onMenuNodeOutputs&&(q=this.onMenuNodeOutputs(q));if(q.length)return new h.ContextMenu(q,{event:d,callback:c,parentMenu:g,node:f},a),!1}};
|
||||
e.onShowMenuNodeProperties=function(a,b,d,g,f){function c(a,b,d,g){f&&(b=this.getBoundingClientRect(),k.showEditPropertyValue(f,a.value,{position:[b.left,b.top]}))}if(f&&f.properties){var k=e.active_canvas;b=k.getCanvasWindow();var q=[],p;for(p in f.properties)a=void 0!==f.properties[p]?f.properties[p]:" ","object"==typeof a&&(a=JSON.stringify(a)),a=e.decodeHTML(a),q.push({content:"<span class='property_name'>"+p+"</span><span class='property_value'>"+a+"</span>",value:p});if(q.length)return new h.ContextMenu(q,
|
||||
s.graph.add(r));f&&f(r)}var s=e.active_canvas,k=s.getCanvasWindow();a=h.getNodeTypesCategories(s.filter);b=[];for(var p in a)a[p]&&b.push({value:a[p],content:a[p],has_submenu:!0});var q=new h.ContextMenu(b,{event:d,callback:function(a,b,d){a=h.getNodeTypesInCategory(a.value,s.filter);b=[];for(var f in a)a[f].skip_list||b.push({content:a[f].title,value:a[f].type});new h.ContextMenu(b,{event:d,callback:c,parentMenu:q},k);return!1},parentMenu:g},k);return!1};e.onMenuCollapseAll=function(){};e.onMenuNodeEdit=
|
||||
function(){};e.showMenuNodeOptionalInputs=function(a,b,d,g,f){function c(a,b,d){f&&(a.callback&&a.callback.call(s,f,a,b,d),a.value&&(f.addInput(a.value[0],a.value[1],a.value[2]),f.setDirtyCanvas(!0,!0)))}if(f){var s=this;a=e.active_canvas.getCanvasWindow();b=f.optional_inputs;f.onGetInputs&&(b=f.onGetInputs());var k=[];if(b)for(var p in b){var q=b[p];if(q){var l=q[0];q[2]&&q[2].label&&(l=q[2].label);l={content:l,value:q};q[1]==h.ACTION&&(l.className="event");k.push(l)}else k.push(null)}this.onMenuNodeInputs&&
|
||||
(k=this.onMenuNodeInputs(k));if(k.length)return new h.ContextMenu(k,{event:d,callback:c,parentMenu:g,node:f},a),!1}};e.showMenuNodeOptionalOutputs=function(a,b,d,g,f){function c(a,b,d){if(f&&(a.callback&&a.callback.call(k,f,a,b,d),a.value))if(d=a.value[1],!d||d.constructor!==Object&&d.constructor!==Array)f.addOutput(a.value[0],a.value[1],a.value[2]),f.setDirtyCanvas(!0,!0);else{a=[];for(var p in d)a.push({content:p,value:d[p]});new h.ContextMenu(a,{event:b,callback:c,parentMenu:g,node:f});return!1}}
|
||||
if(f){var k=this;a=e.active_canvas.getCanvasWindow();b=f.optional_outputs;f.onGetOutputs&&(b=f.onGetOutputs());var p=[];if(b)for(var q in b){var l=b[q];if(!l)p.push(null);else if(!f.flags||!f.flags.skip_repeated_outputs||-1==f.findOutputSlot(l[0])){var z=l[0];l[2]&&l[2].label&&(z=l[2].label);z={content:z,value:l};l[1]==h.EVENT&&(z.className="event");p.push(z)}}this.onMenuNodeOutputs&&(p=this.onMenuNodeOutputs(p));if(p.length)return new h.ContextMenu(p,{event:d,callback:c,parentMenu:g,node:f},a),!1}};
|
||||
e.onShowMenuNodeProperties=function(a,b,d,g,f){function c(a,b,d,g){f&&(b=this.getBoundingClientRect(),k.showEditPropertyValue(f,a.value,{position:[b.left,b.top]}))}if(f&&f.properties){var k=e.active_canvas;b=k.getCanvasWindow();var p=[],q;for(q in f.properties)a=void 0!==f.properties[q]?f.properties[q]:" ","object"==typeof a&&(a=JSON.stringify(a)),a=e.decodeHTML(a),p.push({content:"<span class='property_name'>"+q+"</span><span class='property_value'>"+a+"</span>",value:q});if(p.length)return new h.ContextMenu(p,
|
||||
{event:d,callback:c,parentMenu:g,allow_html:!0,node:f},b),!1}};e.decodeHTML=function(a){var b=document.createElement("div");b.innerText=a;return b.innerHTML};e.onResizeNode=function(a,b,d,g,f){f&&(f.size=f.computeSize(),f.setDirtyCanvas(!0,!0))};e.prototype.showLinkMenu=function(a,b){var d=this;console.log(a);var g=new h.ContextMenu(["Add Node",null,"Delete"],{event:b,title:null!=a.data?a.data.constructor.name:null,callback:function(b,h,c){switch(b){case "Add Node":e.onMenuAdd(null,null,c,g,function(b){console.log("node autoconnect");
|
||||
var f=d.graph.getNodeById(a.origin_id),g=d.graph.getNodeById(a.target_id);b.inputs&&b.inputs.length&&b.outputs&&b.outputs.length&&f.outputs[a.origin_slot].type==b.inputs[0].type&&b.outputs[0].type==g.inputs[0].type&&(f.connect(a.origin_slot,b,0),b.connect(0,g,a.target_slot),b.pos[0]-=0.5*b.size[0])});break;case "Delete":d.graph.removeLink(a.id)}}});return!1};e.onShowPropertyEditor=function(a,b,d,g,f){function h(){var b=q.value;"Number"==a.type?b=Number(b):"Boolean"==a.type&&(b=Boolean(b));f[c]=b;
|
||||
k.parentNode&&k.parentNode.removeChild(k);f.setDirtyCanvas(!0,!0)}var c=a.property||"title";b=f[c];var k=document.createElement("div");k.className="graphdialog";k.innerHTML="<span class='name'></span><input autofocus type='text' class='value'/><button>OK</button>";k.querySelector(".name").innerText=c;var q=k.querySelector("input");q&&(q.value=b,q.addEventListener("blur",function(a){this.focus()}),q.addEventListener("keydown",function(a){13==a.keyCode&&(h(),a.preventDefault(),a.stopPropagation())}));
|
||||
b=e.active_canvas.canvas;d=b.getBoundingClientRect();var p=g=-20;d&&(g-=d.left,p-=d.top);event?(k.style.left=event.clientX+g+"px",k.style.top=event.clientY+p+"px"):(k.style.left=0.5*b.width+g+"px",k.style.top=0.5*b.height+p+"px");k.querySelector("button").addEventListener("click",h);b.parentNode.appendChild(k)};e.prototype.prompt=function(a,b,d,g){var f=this;a=a||"";var h=!1,c=document.createElement("div");c.className="graphdialog rounded";c.innerHTML="<span class='name'></span> <input autofocus type='text' class='value'/><button class='rounded'>OK</button>";
|
||||
var f=d.graph.getNodeById(a.origin_id),g=d.graph.getNodeById(a.target_id);b.inputs&&b.inputs.length&&b.outputs&&b.outputs.length&&f.outputs[a.origin_slot].type==b.inputs[0].type&&b.outputs[0].type==g.inputs[0].type&&(f.connect(a.origin_slot,b,0),b.connect(0,g,a.target_slot),b.pos[0]-=0.5*b.size[0])});break;case "Delete":d.graph.removeLink(a.id)}}});return!1};e.onShowPropertyEditor=function(a,b,d,g,f){function h(){var b=p.value;"Number"==a.type?b=Number(b):"Boolean"==a.type&&(b=Boolean(b));f[c]=b;
|
||||
k.parentNode&&k.parentNode.removeChild(k);f.setDirtyCanvas(!0,!0)}var c=a.property||"title";b=f[c];var k=document.createElement("div");k.className="graphdialog";k.innerHTML="<span class='name'></span><input autofocus type='text' class='value'/><button>OK</button>";k.querySelector(".name").innerText=c;var p=k.querySelector("input");p&&(p.value=b,p.addEventListener("blur",function(a){this.focus()}),p.addEventListener("keydown",function(a){13==a.keyCode&&(h(),a.preventDefault(),a.stopPropagation())}));
|
||||
b=e.active_canvas.canvas;d=b.getBoundingClientRect();var q=g=-20;d&&(g-=d.left,q-=d.top);event?(k.style.left=event.clientX+g+"px",k.style.top=event.clientY+q+"px"):(k.style.left=0.5*b.width+g+"px",k.style.top=0.5*b.height+q+"px");k.querySelector("button").addEventListener("click",h);b.parentNode.appendChild(k)};e.prototype.prompt=function(a,b,d,g){var f=this;a=a||"";var h=!1,c=document.createElement("div");c.className="graphdialog rounded";c.innerHTML="<span class='name'></span> <input autofocus type='text' class='value'/><button class='rounded'>OK</button>";
|
||||
c.close=function(){f.prompt_box=null;c.parentNode&&c.parentNode.removeChild(c)};1<this.ds.scale&&(c.style.transform="scale("+this.ds.scale+")");c.addEventListener("mouseleave",function(a){h||c.close()});f.prompt_box&&f.prompt_box.close();f.prompt_box=c;c.querySelector(".name").innerText=a;c.querySelector(".value").value=b;var k=c.querySelector("input");k.addEventListener("keydown",function(a){h=!0;if(27==a.keyCode)c.close();else if(13==a.keyCode)d&&d(this.value),c.close();else return;a.preventDefault();
|
||||
a.stopPropagation()});c.querySelector("button").addEventListener("click",function(a){d&&d(k.value);f.setDirty(!0);c.close()});a=e.active_canvas.canvas;b=a.getBoundingClientRect();var q=-20,p=-20;b&&(q-=b.left,p-=b.top);g?(c.style.left=g.clientX+q+"px",c.style.top=g.clientY+p+"px"):(c.style.left=0.5*a.width+q+"px",c.style.top=0.5*a.height+p+"px");a.parentNode.appendChild(c);setTimeout(function(){k.focus()},10);return c};e.search_limit=-1;e.prototype.showSearchBox=function(a){function b(b){if(b)if(f.onSearchBoxSelection)f.onSearchBoxSelection(b,
|
||||
a.stopPropagation()});c.querySelector("button").addEventListener("click",function(a){d&&d(k.value);f.setDirty(!0);c.close()});a=e.active_canvas.canvas;b=a.getBoundingClientRect();var p=-20,q=-20;b&&(p-=b.left,q-=b.top);g?(c.style.left=g.clientX+p+"px",c.style.top=g.clientY+q+"px"):(c.style.left=0.5*a.width+p+"px",c.style.top=0.5*a.height+q+"px");a.parentNode.appendChild(c);setTimeout(function(){k.focus()},10);return c};e.search_limit=-1;e.prototype.showSearchBox=function(a){function b(b){if(b)if(f.onSearchBoxSelection)f.onSearchBoxSelection(b,
|
||||
a,c);else{var d=h.searchbox_extras[b.toLowerCase()];d&&(b=d.type);if(b=h.createNode(b))b.pos=c.convertEventToCanvasOffset(a),c.graph.add(b);if(d&&d.data){if(d.data.properties)for(var g in d.data.properties)b.addProperty(g,d.data.properties[g]);if(d.data.inputs)for(g in b.inputs=[],d.data.inputs)b.addOutput(d.data.inputs[g][0],d.data.inputs[g][1]);if(d.data.outputs)for(g in b.outputs=[],d.data.outputs)b.addOutput(d.data.outputs[g][0],d.data.outputs[g][1]);d.data.title&&(b.title=d.data.title);d.data.json&&
|
||||
b.configure(d.data.json)}}p.close()}function d(a){var b=y;y&&y.classList.remove("selected");y?(y=a?y.nextSibling:y.previousSibling)||(y=b):y=a?z.childNodes[0]:z.childNodes[z.childNodes.length];y&&(y.classList.add("selected"),y.scrollIntoView({block:"end",behavior:"smooth"}))}function g(){function a(d,f){var g=document.createElement("div");t||(t=d);g.innerText=d;g.dataset.type=escape(d);g.className="litegraph lite-search-item";f&&(g.className+=" "+f);g.addEventListener("click",function(a){b(unescape(this.dataset.type))});
|
||||
z.appendChild(g)}n=null;var d=u.value;t=null;z.innerHTML="";if(d)if(f.onSearchBox){var g=f.onSearchBox(z,d,c);if(g)for(var k=0;k<g.length;++k)a(g[k])}else{var g=0,d=d.toLowerCase(),s=c.filter||c.graph.filter;for(k in h.searchbox_extras){var q=h.searchbox_extras[k];if(-1!==q.desc.toLowerCase().indexOf(d)){var p=h.registered_node_types[q.type];if(!p||!p.filter||p.filter==s)if(a(q.desc,"searchbox_extra"),-1!==e.search_limit&&g++>e.search_limit)break}}q=null;if(Array.prototype.filter)q=Object.keys(h.registered_node_types).filter(l);
|
||||
else for(k in q=[],h.registered_node_types)l(k)&&q.push(k);for(k=0;k<q.length&&!(a(q[k]),-1!==e.search_limit&&g++>e.search_limit);k++);var l=function(a){var b=h.registered_node_types[a];return s&&b.filter!=s?!1:-1!==a.toLowerCase().indexOf(d)}}}var f=this,c=e.active_canvas,k=c.canvas,q=k.ownerDocument||document,p=document.createElement("div");p.className="litegraph litesearchbox graphdialog rounded";p.innerHTML="<span class='name'>Search</span> <input autofocus type='text' class='value rounded'/><div class='helper'></div>";
|
||||
p.close=function(){f.search_box=null;q.body.focus();q.body.style.overflow="";setTimeout(function(){f.canvas.focus()},20);p.parentNode&&p.parentNode.removeChild(p)};var l=null;1<this.ds.scale&&(p.style.transform="scale("+this.ds.scale+")");p.addEventListener("mouseenter",function(a){l&&(clearTimeout(l),l=null)});p.addEventListener("mouseleave",function(a){l=setTimeout(function(){p.close()},500)});f.search_box&&f.search_box.close();f.search_box=p;var z=p.querySelector(".helper"),t=null,n=null,y=null,
|
||||
u=p.querySelector("input");u&&(u.addEventListener("blur",function(a){this.focus()}),u.addEventListener("keydown",function(a){if(38==a.keyCode)d(!1);else if(40==a.keyCode)d(!0);else if(27==a.keyCode)p.close();else if(13==a.keyCode)y?b(y.innerHTML):t?b(t):p.close();else{n&&clearInterval(n);n=setTimeout(g,10);return}a.preventDefault();a.stopPropagation();a.stopImmediatePropagation();return!0}));q.fullscreenElement?q.fullscreenElement.appendChild(p):(q.body.appendChild(p),q.body.style.overflow="hidden");
|
||||
var k=k.getBoundingClientRect(),m=(a?a.clientY:k.top+0.5*k.height)-20;p.style.left=(a?a.clientX:k.left+0.5*k.width)-80+"px";p.style.top=m+"px";a.layerY>k.height-200&&(z.style.maxHeight=k.height-a.layerY-20+"px");u.focus();return p};e.prototype.showEditPropertyValue=function(a,b,d){function g(){f(t.value)}function f(f){"number"==typeof a.properties[b]&&(f=Number(f));if("array"==h||"object"==h)f=JSON.parse(f);a.properties[b]=f;a._graph&&a._graph._version++;if(a.onPropertyChanged)a.onPropertyChanged(b,
|
||||
f);if(d.onclose)d.onclose();p.close();a.setDirtyCanvas(!0,!0)}if(a&&void 0!==a.properties[b]){d=d||{};var c=a.getPropertyInfo(b),h=c.type,k="";if("string"==h||"number"==h||"array"==h||"object"==h)k="<input autofocus type='text' class='value'/>";else if("enum"==h&&c.values){var k="<select autofocus type='text' class='value'>",q;for(q in c.values)var e=c.values.constructor===Array?c.values[q]:q,k=k+("<option value='"+e+"' "+(e==a.properties[b]?"selected":"")+">"+c.values[q]+"</option>");k+="</select>"}else if("boolean"==
|
||||
h)k="<input autofocus type='checkbox' class='value' "+(a.properties[b]?"checked":"")+"/>";else{console.warn("unknown type: "+h);return}var p=this.createDialog("<span class='name'>"+b+"</span>"+k+"<button>OK</button>",d);if("enum"==h&&c.values){var t=p.querySelector("select");t.addEventListener("change",function(a){f(a.target.value)})}else if("boolean"==h)(t=p.querySelector("input"))&&t.addEventListener("click",function(a){f(!!t.checked)});else if(t=p.querySelector("input"))t.addEventListener("blur",
|
||||
function(a){this.focus()}),e=void 0!==a.properties[b]?a.properties[b]:"",e=JSON.stringify(e),t.value=e,t.addEventListener("keydown",function(a){13==a.keyCode&&(g(),a.preventDefault(),a.stopPropagation())});p.querySelector("button").addEventListener("click",g);return p}};e.prototype.createDialog=function(a,b){b=b||{};var d=document.createElement("div");d.className="graphdialog";d.innerHTML=a;var g=this.canvas.getBoundingClientRect(),f=-20,c=-20;g&&(f-=g.left,c-=g.top);b.position?(f+=b.position[0],
|
||||
b.configure(d.data.json)}}q.close()}function d(a){var b=y;y&&y.classList.remove("selected");y?(y=a?y.nextSibling:y.previousSibling)||(y=b):y=a?z.childNodes[0]:z.childNodes[z.childNodes.length];y&&(y.classList.add("selected"),y.scrollIntoView({block:"end",behavior:"smooth"}))}function g(){function a(d,f){var g=document.createElement("div");t||(t=d);g.innerText=d;g.dataset.type=escape(d);g.className="litegraph lite-search-item";f&&(g.className+=" "+f);g.addEventListener("click",function(a){b(unescape(this.dataset.type))});
|
||||
z.appendChild(g)}n=null;var d=u.value;t=null;z.innerHTML="";if(d)if(f.onSearchBox){var g=f.onSearchBox(z,d,c);if(g)for(var k=0;k<g.length;++k)a(g[k])}else{var g=0,d=d.toLowerCase(),p=c.filter||c.graph.filter;for(k in h.searchbox_extras){var s=h.searchbox_extras[k];if(-1!==s.desc.toLowerCase().indexOf(d)){var q=h.registered_node_types[s.type];if(!q||!q.filter||q.filter==p)if(a(s.desc,"searchbox_extra"),-1!==e.search_limit&&g++>e.search_limit)break}}s=null;if(Array.prototype.filter)s=Object.keys(h.registered_node_types).filter(l);
|
||||
else for(k in s=[],h.registered_node_types)l(k)&&s.push(k);for(k=0;k<s.length&&!(a(s[k]),-1!==e.search_limit&&g++>e.search_limit);k++);var l=function(a){var b=h.registered_node_types[a];return p&&b.filter!=p?!1:-1!==a.toLowerCase().indexOf(d)}}}var f=this,c=e.active_canvas,k=c.canvas,p=k.ownerDocument||document,q=document.createElement("div");q.className="litegraph litesearchbox graphdialog rounded";q.innerHTML="<span class='name'>Search</span> <input autofocus type='text' class='value rounded'/><div class='helper'></div>";
|
||||
q.close=function(){f.search_box=null;p.body.focus();p.body.style.overflow="";setTimeout(function(){f.canvas.focus()},20);q.parentNode&&q.parentNode.removeChild(q)};var l=null;1<this.ds.scale&&(q.style.transform="scale("+this.ds.scale+")");q.addEventListener("mouseenter",function(a){l&&(clearTimeout(l),l=null)});q.addEventListener("mouseleave",function(a){l=setTimeout(function(){q.close()},500)});f.search_box&&f.search_box.close();f.search_box=q;var z=q.querySelector(".helper"),t=null,n=null,y=null,
|
||||
u=q.querySelector("input");u&&(u.addEventListener("blur",function(a){this.focus()}),u.addEventListener("keydown",function(a){if(38==a.keyCode)d(!1);else if(40==a.keyCode)d(!0);else if(27==a.keyCode)q.close();else if(13==a.keyCode)y?b(y.innerHTML):t?b(t):q.close();else{n&&clearInterval(n);n=setTimeout(g,10);return}a.preventDefault();a.stopPropagation();a.stopImmediatePropagation();return!0}));p.fullscreenElement?p.fullscreenElement.appendChild(q):(p.body.appendChild(q),p.body.style.overflow="hidden");
|
||||
var k=k.getBoundingClientRect(),m=(a?a.clientY:k.top+0.5*k.height)-20;q.style.left=(a?a.clientX:k.left+0.5*k.width)-80+"px";q.style.top=m+"px";a.layerY>k.height-200&&(z.style.maxHeight=k.height-a.layerY-20+"px");u.focus();return q};e.prototype.showEditPropertyValue=function(a,b,d){function g(){f(t.value)}function f(f){"number"==typeof a.properties[b]&&(f=Number(f));if("array"==h||"object"==h)f=JSON.parse(f);a.properties[b]=f;a._graph&&a._graph._version++;if(a.onPropertyChanged)a.onPropertyChanged(b,
|
||||
f);if(d.onclose)d.onclose();e.close();a.setDirtyCanvas(!0,!0)}if(a&&void 0!==a.properties[b]){d=d||{};var c=a.getPropertyInfo(b),h=c.type,k="";if("string"==h||"number"==h||"array"==h||"object"==h)k="<input autofocus type='text' class='value'/>";else if("enum"==h&&c.values){var k="<select autofocus type='text' class='value'>",p;for(p in c.values)var q=c.values.constructor===Array?c.values[p]:p,k=k+("<option value='"+q+"' "+(q==a.properties[b]?"selected":"")+">"+c.values[p]+"</option>");k+="</select>"}else if("boolean"==
|
||||
h)k="<input autofocus type='checkbox' class='value' "+(a.properties[b]?"checked":"")+"/>";else{console.warn("unknown type: "+h);return}var e=this.createDialog("<span class='name'>"+b+"</span>"+k+"<button>OK</button>",d);if("enum"==h&&c.values){var t=e.querySelector("select");t.addEventListener("change",function(a){f(a.target.value)})}else if("boolean"==h)(t=e.querySelector("input"))&&t.addEventListener("click",function(a){f(!!t.checked)});else if(t=e.querySelector("input"))t.addEventListener("blur",
|
||||
function(a){this.focus()}),q=void 0!==a.properties[b]?a.properties[b]:"",q=JSON.stringify(q),t.value=q,t.addEventListener("keydown",function(a){13==a.keyCode&&(g(),a.preventDefault(),a.stopPropagation())});e.querySelector("button").addEventListener("click",g);return e}};e.prototype.createDialog=function(a,b){b=b||{};var d=document.createElement("div");d.className="graphdialog";d.innerHTML=a;var g=this.canvas.getBoundingClientRect(),f=-20,c=-20;g&&(f-=g.left,c-=g.top);b.position?(f+=b.position[0],
|
||||
c+=b.position[1]):b.event?(f+=b.event.clientX,c+=b.event.clientY):(f+=0.5*this.canvas.width,c+=0.5*this.canvas.height);d.style.left=f+"px";d.style.top=c+"px";this.canvas.parentNode.appendChild(d);d.close=function(){this.parentNode&&this.parentNode.removeChild(this)};return d};e.onMenuNodeCollapse=function(a,b,d,g,f){f.collapse()};e.onMenuNodePin=function(a,b,d,g,f){f.pin()};e.onMenuNodeMode=function(a,b,d,g,f){new h.ContextMenu(["Always","On Event","On Trigger","Never"],{event:d,callback:function(a){if(f)switch(a){case "On Event":f.mode=
|
||||
h.ON_EVENT;break;case "On Trigger":f.mode=h.ON_TRIGGER;break;case "Never":f.mode=h.NEVER;break;default:f.mode=h.ALWAYS}},parentMenu:g,node:f});return!1};e.onMenuNodeColors=function(a,b,d,g,f){if(!f)throw"no node for color";b=[];b.push({value:null,content:"<span style='display: block; padding-left: 4px;'>No color</span>"});for(var c in e.node_colors)a=e.node_colors[c],a={value:c,content:"<span style='display: block; color: #999; padding-left: 4px; border-left: 8px solid "+a.color+"; background-color:"+
|
||||
a.bgcolor+"'>"+c+"</span>"},b.push(a);new h.ContextMenu(b,{event:d,callback:function(a){f&&((a=a.value?e.node_colors[a.value]:null)?f.constructor===h.LGraphGroup?f.color=a.groupcolor:(f.color=a.color,f.bgcolor=a.bgcolor):(delete f.color,delete f.bgcolor),f.setDirtyCanvas(!0,!0))},parentMenu:g,node:f});return!1};e.onMenuNodeShapes=function(a,b,d,g,f){if(!f)throw"no node passed";new h.ContextMenu(h.VALID_SHAPES,{event:d,callback:function(a){f&&(f.shape=a,f.setDirtyCanvas(!0))},parentMenu:g,node:f});
|
||||
@@ -227,8 +227,8 @@ callback:e.onShowMenuNodeProperties},null,{content:"Title",callback:e.onShowProp
|
||||
(d=a.onGetOutputs())&&d.length&&(b[1].disabled=!1);a.getExtraMenuOptions&&(d=a.getExtraMenuOptions(this))&&(d.push(null),b=d.concat(b));!1!==a.clonable&&b.push({content:"Clone",callback:e.onMenuNodeClone});!1!==a.removable&&b.push(null,{content:"Remove",callback:e.onMenuNodeRemove});if(a.graph&&a.graph.onGetNodeMenuOptions)a.graph.onGetNodeMenuOptions(b,a);return b};e.prototype.getGroupMenuOptions=function(a){return[{content:"Title",callback:e.onShowPropertyEditor},{content:"Color",has_submenu:!0,
|
||||
callback:e.onMenuNodeColors},{content:"Font size",property:"font_size",type:"Number",callback:e.onShowPropertyEditor},null,{content:"Remove",callback:e.onMenuNodeRemove}]};e.prototype.processContextMenu=function(a,b){var d=this,g=e.active_canvas.getCanvasWindow(),f=null,c={event:b,callback:function(b,f,g){if(b)if("Remove Slot"==b.content)b=b.slot,b.input?a.removeInput(b.slot):b.output&&a.removeOutput(b.slot);else if("Disconnect Links"==b.content)b=b.slot,b.output?a.disconnectOutput(b.slot):b.input&&
|
||||
a.disconnectInput(b.slot);else if("Rename Slot"==b.content){b=b.slot;var c=b.input?a.getInputInfo(b.slot):a.getOutputInfo(b.slot),h=d.createDialog("<span class='name'>Name</span><input autofocus type='text'/><button>OK</button>",f),k=h.querySelector("input");k&&c&&(k.value=c.label||"");h.querySelector("button").addEventListener("click",function(a){k.value&&(c&&(c.label=k.value),d.setDirty(!0));h.close()})}},extra:a};a&&(c.title=a.type);var k=null;a&&(k=a.getSlotInPosition(b.canvasX,b.canvasY),e.active_node=
|
||||
a);if(k){f=[];k&&k.output&&k.output.links&&k.output.links.length&&f.push({content:"Disconnect Links",slot:k});var q=k.input||k.output;f.push(q.locked?"Cannot remove":{content:"Remove Slot",slot:k});f.push(q.nameLocked?"Cannot rename":{content:"Rename Slot",slot:k});c.title=(k.input?k.input.type:k.output.type)||"*";k.input&&k.input.type==h.ACTION&&(c.title="Action");k.output&&k.output.type==h.EVENT&&(c.title="Event")}else a?f=this.getNodeMenuOptions(a):(f=this.getCanvasMenuOptions(),(k=this.graph.getGroupOnPos(b.canvasX,
|
||||
b.canvasY))&&f.push(null,{content:"Edit Group",has_submenu:!0,submenu:{title:"Group",extra:k,options:this.getGroupMenuOptions(k)}}));f&&new h.ContextMenu(f,c,g)};this.CanvasRenderingContext2D&&(CanvasRenderingContext2D.prototype.roundRect=function(a,b,d,g,f,c){void 0===f&&(f=5);void 0===c&&(c=f);this.moveTo(a+f,b);this.lineTo(a+d-f,b);this.quadraticCurveTo(a+d,b,a+d,b+f);this.lineTo(a+d,b+g-c);this.quadraticCurveTo(a+d,b+g,a+d-c,b+g);this.lineTo(a+c,b+g);this.quadraticCurveTo(a,b+g,a,b+g-c);this.lineTo(a,
|
||||
a);if(k){f=[];k&&k.output&&k.output.links&&k.output.links.length&&f.push({content:"Disconnect Links",slot:k});var p=k.input||k.output;f.push(p.locked?"Cannot remove":{content:"Remove Slot",slot:k});f.push(p.nameLocked?"Cannot rename":{content:"Rename Slot",slot:k});c.title=(k.input?k.input.type:k.output.type)||"*";k.input&&k.input.type==h.ACTION&&(c.title="Action");k.output&&k.output.type==h.EVENT&&(c.title="Event")}else a?f=this.getNodeMenuOptions(a):(f=this.getCanvasMenuOptions(),(k=this.graph.getGroupOnPos(b.canvasX,
|
||||
b.canvasY))&&f.push(null,{content:"Edit Group",has_submenu:!0,submenu:{title:"Group",extra:k,options:this.getGroupMenuOptions(k)}}));f&&new h.ContextMenu(f,c,g)};B.CanvasRenderingContext2D&&(B.CanvasRenderingContext2D.prototype.roundRect=function(a,b,d,g,f,c){void 0===f&&(f=5);void 0===c&&(c=f);this.moveTo(a+f,b);this.lineTo(a+d-f,b);this.quadraticCurveTo(a+d,b,a+d,b+f);this.lineTo(a+d,b+g-c);this.quadraticCurveTo(a+d,b+g,a+d-c,b+g);this.lineTo(a+c,b+g);this.quadraticCurveTo(a,b+g,a,b+g-c);this.lineTo(a,
|
||||
b+f);this.quadraticCurveTo(a,b,a+f,b)});h.compareObjects=function(a,b){for(var d in a)if(a[d]!=b[d])return!1;return!0};h.distance=C;h.colorToString=function(a){return"rgba("+Math.round(255*a[0]).toFixed()+","+Math.round(255*a[1]).toFixed()+","+Math.round(255*a[2]).toFixed()+","+(4==a.length?a[3].toFixed(2):"1.0")+")"};h.isInsideRectangle=w;h.growBounding=function(a,b,d){b<a[0]?a[0]=b:b>a[2]&&(a[2]=b);d<a[1]?a[1]=d:d>a[3]&&(a[3]=d)};h.isInsideBounding=function(a,b){return a[0]<b[0][0]||a[1]<b[0][1]||
|
||||
a[0]>b[1][0]||a[1]>b[1][1]?!1:!0};h.overlapBounding=u;h.hex2num=function(a){"#"==a.charAt(0)&&(a=a.slice(1));a=a.toUpperCase();for(var b=Array(3),d=0,g,f,c=0;6>c;c+=2)g="0123456789ABCDEF".indexOf(a.charAt(c)),f="0123456789ABCDEF".indexOf(a.charAt(c+1)),b[d]=16*g+f,d++;return b};h.num2hex=function(a){for(var b="#",d,g,f=0;3>f;f++)d=a[f]/16,g=a[f]%16,b+="0123456789ABCDEF".charAt(d)+"0123456789ABCDEF".charAt(g);return b};D.prototype.addItem=function(a,b,d){function g(a){var b=this.value;b&&b.has_submenu&&
|
||||
f.call(this,a)}function f(a){var b=this.value,f=!0;c.current_submenu&&c.current_submenu.close(a);if(d.callback){var g=d.callback.call(this,b,d,a,c,d.node);!0===g&&(f=!1)}if(b&&(b.callback&&!d.ignore_item_callbacks&&!0!==b.disabled&&(g=b.callback.call(this,b,d,a,c,d.extra),!0===g&&(f=!1)),b.submenu)){if(!b.submenu.options)throw"ContextMenu submenu needs options";new c.constructor(b.submenu.options,{callback:b.submenu.callback,event:a,parentMenu:c,ignore_item_callbacks:b.submenu.ignore_item_callbacks,
|
||||
@@ -240,7 +240,7 @@ b){var d=a.clientX,g=a.clientY,f=b.getBoundingClientRect();return f?g>f.top&&g<f
|
||||
b;var h=b[0]-2*this.margin;b=b[1]-2*this.margin;f=f||"#666";a.save();a.translate(this.margin,this.margin);g&&(a.fillStyle="#111",a.fillRect(0,0,h,b),a.fillStyle="#222",a.fillRect(0.5*h,0,1,b),a.strokeStyle="#333",a.strokeRect(0,0,h,b));a.strokeStyle=f;c&&(a.globalAlpha=0.5);a.beginPath();for(g=0;g<d.length;++g)f=d[g],a.lineTo(f[0]*h,(1-f[1])*b);a.stroke();a.globalAlpha=1;if(!c)for(g=0;g<d.length;++g)f=d[g],a.fillStyle=this.selected==g?"#FFF":this.nearest==g?"#DDD":"#AAA",a.beginPath(),a.arc(f[0]*
|
||||
h,(1-f[1])*b,2,0,2*Math.PI),a.fill();a.restore()}};A.prototype.onMouseDown=function(a,b){var d=this.points;if(d&&!(0>a[1])){var g=this.size[0]-2*this.margin,f=this.size[1]-2*this.margin,c=a[0]-this.margin,h=a[1]-this.margin;this.selected=this.getCloserPoint([c,h],30/b.ds.scale);-1==this.selected&&(g=[c/g,1-h/f],d.push(g),d.sort(function(a,b){return a[0]-b[0]}),this.selected=d.indexOf(g),this.must_update=!0);if(-1!=this.selected)return!0}};A.prototype.onMouseMove=function(a,b){var d=this.points;if(d){var g=
|
||||
this.selected;if(!(0>g)){var f=(a[0]-this.margin)/(this.size[0]-2*this.margin),c=(a[1]-this.margin)/(this.size[1]-2*this.margin);this._nearest=this.getCloserPoint([a[0]-this.margin,a[1]-this.margin],30/b.ds.scale);var h=d[g];if(h){var k=0==g||g==d.length-1;!k&&(-10>a[0]||a[0]>this.size[0]+10||-10>a[1]||a[1]>this.size[1]+10)?(d.splice(g,1),this.selected=-1):(h[0]=k?0==g?0:1:Math.clamp(f,0,1),h[1]=1-Math.clamp(c,0,1),d.sort(function(a,b){return a[0]-b[0]}),this.selected=d.indexOf(h),this.must_update=
|
||||
!0)}}}};A.prototype.onMouseUp=function(a,b){this.selected=-1;return!1};A.prototype.getCloserPoint=function(a,b){var d=this.points;if(!d)return-1;b=b||30;for(var g=this.size[0]-2*this.margin,f=this.size[1]-2*this.margin,c=d.length,h=[0,0],k=1E6,q=-1,e=0;e<c;++e){var p=d[e];h[0]=p[0]*g;h[1]=(1-p[1])*f;p=vec2.distance(a,h);p>k||p>b||(q=e,k=p)}return q};h.CurveEditor=A;h.getParameterNames=function(a){return(a+"").replace(/[/][/].*$/gm,"").replace(/\s+/g,"").replace(/[/][*][^/*]*[*][/]/g,"").split("){",
|
||||
!0)}}}};A.prototype.onMouseUp=function(a,b){this.selected=-1;return!1};A.prototype.getCloserPoint=function(a,b){var d=this.points;if(!d)return-1;b=b||30;for(var g=this.size[0]-2*this.margin,f=this.size[1]-2*this.margin,c=d.length,h=[0,0],k=1E6,p=-1,q=0;q<c;++q){var e=d[q];h[0]=e[0]*g;h[1]=(1-e[1])*f;e=vec2.distance(a,h);e>k||e>b||(p=q,k=e)}return p};h.CurveEditor=A;h.getParameterNames=function(a){return(a+"").replace(/[/][/].*$/gm,"").replace(/\s+/g,"").replace(/[/][*][^/*]*[*][/]/g,"").split("){",
|
||||
1)[0].replace(/^[^(]*[(]/,"").replace(/=[^,]+/g,"").split(",").filter(Boolean)};Math.clamp=function(a,b,d){return b>a?b:d<a?d:a};"undefined"==typeof window||window.requestAnimationFrame||(window.requestAnimationFrame=window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(a){window.setTimeout(a,1E3/60)})})(this);"undefined"!=typeof exports&&(exports.LiteGraph=this.LiteGraph);
|
||||
(function(B){function c(){this.addOutput("in ms","number");this.addOutput("in sec","number")}function m(){this.size=[140,80];this.properties={enabled:!0};this.enabled=!0;this.subgraph=new g.LGraph;this.subgraph._subgraph_node=this;this.subgraph._is_subgraph=!0;this.subgraph.onTrigger=this.onSubgraphTrigger.bind(this);this.subgraph.onInputAdded=this.onSubgraphNewInput.bind(this);this.subgraph.onInputRenamed=this.onSubgraphRenamedInput.bind(this);this.subgraph.onInputTypeChanged=this.onSubgraphTypeChangeInput.bind(this);
|
||||
this.subgraph.onInputRemoved=this.onSubgraphRemovedInput.bind(this);this.subgraph.onOutputAdded=this.onSubgraphNewOutput.bind(this);this.subgraph.onOutputRenamed=this.onSubgraphRenamedOutput.bind(this);this.subgraph.onOutputTypeChanged=this.onSubgraphTypeChangeOutput.bind(this);this.subgraph.onOutputRemoved=this.onSubgraphRemovedOutput.bind(this)}function n(){this.addOutput("","number");this.name_in_graph="";this.properties={name:"",type:"number",value:0};var a=this;this.name_widget=this.addWidget("text",
|
||||
@@ -250,7 +250,7 @@ this.properties.name,"name");this.type_widget=this.addWidget("text","Type",this.
|
||||
"string");this.addProperty("value","");this.widget=this.addWidget("text","value","","value");this.widgets_up=!0;this.size=[180,30]}function w(){this.addInput("url","");this.addOutput("","");this.addProperty("url","");this.addProperty("type","text");this.widget=this.addWidget("text","url","","url");this._data=null}function u(){this.addOutput("","");this.addProperty("value","");this.widget=this.addWidget("text","json","","value");this.widgets_up=!0;this.size=[140,30];this._value=null}function D(){this.addInput("",
|
||||
"");this.addOutput("","array");this.addProperty("value","");this.widget=this.addWidget("text","array","","value");this.widgets_up=!0;this.size=[140,30];this._value=null}function A(){this.addInput("array","array,table,string");this.addInput("index","number");this.addOutput("value","");this.addProperty("index",0)}function h(){this.addInput("table","table");this.addInput("row","number");this.addInput("col","number");this.addOutput("value","");this.addProperty("row",0);this.addProperty("column",0)}function z(){this.addInput("obj",
|
||||
"");this.addOutput("","");this.addProperty("value","");this.widget=this.addWidget("text","prop.","",this.setValue.bind(this));this.widgets_up=!0;this.size=[140,30];this._value=null}function y(){this.addInput("obj","");this.addOutput("keys","array");this.size=[140,30]}function v(){this.addInput("A","object");this.addInput("B","object");this.addOutput("","object");this._result={};var a=this;this.addWidget("button","clear","",function(){a._result={}});this.size=this.computeSize()}function G(){this.size=
|
||||
[60,30];this.addInput("in");this.addOutput("out");this.properties={varname:"myname",global:!1};this.value=null}function q(){this.size=[60,30];this.addInput("data",0);this.addInput("download",g.ACTION);this.properties={filename:"data.json"};this.value=null;var a=this;this.addWidget("button","Download","",function(b){a.value&&a.downloadAsFile()})}function p(){this.size=[60,30];this.addInput("value",0,{label:""});this.value=0}function k(){this.addInput("in",0);this.addOutput("out",0);this.size=[40,30]}
|
||||
[60,30];this.addInput("in");this.addOutput("out");this.properties={varname:"myname",global:!1};this.value=null}function p(){this.size=[60,30];this.addInput("data",0);this.addInput("download",g.ACTION);this.properties={filename:"data.json"};this.value=null;var a=this;this.addWidget("button","Download","",function(b){a.value&&a.downloadAsFile()})}function q(){this.size=[60,30];this.addInput("value",0,{label:""});this.value=0}function k(){this.addInput("in",0);this.addOutput("out",0);this.size=[40,30]}
|
||||
function a(){this.mode=g.ON_EVENT;this.size=[80,30];this.addProperty("msg","");this.addInput("log",g.EVENT);this.addInput("msg",0)}function b(){this.mode=g.ON_EVENT;this.addProperty("msg","");this.addInput("",g.EVENT);var a=this;this.widget=this.addWidget("text","Text","",function(b){a.properties.msg=b});this.widgets_up=!0;this.size=[200,30]}function d(){this.size=[60,30];this.addProperty("onExecute","return A;");this.addInput("A","");this.addInput("B","");this.addOutput("out","");this._func=null;
|
||||
this.data={}}var g=B.LiteGraph;c.title="Time";c.desc="Time";c.prototype.onExecute=function(){this.setOutputData(0,1E3*this.graph.globaltime);this.setOutputData(1,this.graph.globaltime)};g.registerNodeType("basic/time",c);m.title="Subgraph";m.desc="Graph inside a node";m.title_color="#334";m.prototype.onGetInputs=function(){return[["enabled","boolean"]]};m.prototype.onDrawTitle=function(a){if(!this.flags.collapsed){a.fillStyle="#555";var b=g.NODE_TITLE_HEIGHT,d=this.size[0]-b;a.fillRect(d,-b,b,b);
|
||||
a.fillStyle="#333";a.beginPath();a.moveTo(d+0.2*b,0.6*-b);a.lineTo(d+0.8*b,0.6*-b);a.lineTo(d+0.5*b,0.3*-b);a.fill()}};m.prototype.onDblClick=function(a,b,d){var g=this;setTimeout(function(){d.openSubgraph(g.subgraph)},10)};m.prototype.onMouseDown=function(a,b,d){if(!this.flags.collapsed&&b[0]>this.size[0]-g.NODE_TITLE_HEIGHT&&0>b[1]){var c=this;setTimeout(function(){d.openSubgraph(c.subgraph)},10)}};m.prototype.onAction=function(a,b){this.subgraph.onAction(a,b)};m.prototype.onExecute=function(){if(this.enabled=
|
||||
@@ -272,10 +272,10 @@ u.prototype.onPropertyChanged=function(a,b){this.widget.value=b;if(null!=b&&""!=
|
||||
a[Math.floor(Number(b))])};g.registerNodeType("basic/array[]",A);h.title="Table[row][col]";h.desc="Returns an element from a table";h.prototype.onExecute=function(){var a=this.getInputData(0),b=this.getInputData(1),d=this.getInputData(2);null==b&&(b=this.properties.row);null==d&&(d=this.properties.column);null!=a&&null!=b&&null!=d&&((b=a[Math.floor(Number(b))])?this.setOutputData(0,b[Math.floor(Number(d))]):this.setOutputData(0,null))};g.registerNodeType("basic/table[][]",h);z.title="Object property";
|
||||
z.desc="Outputs the property of an object";z.prototype.setValue=function(a){this.properties.value=a;this.widget.value=a};z.prototype.getTitle=function(){return this.flags.collapsed?"in."+this.properties.value:this.title};z.prototype.onPropertyChanged=function(a,b){this.widget.value=b};z.prototype.onExecute=function(){var a=this.getInputData(0);null!=a&&this.setOutputData(0,a[this.properties.value])};g.registerNodeType("basic/object_property",z);y.title="Object keys";y.desc="Outputs an array with the keys of an object";
|
||||
y.prototype.onExecute=function(){var a=this.getInputData(0);null!=a&&this.setOutputData(0,Object.keys(a))};g.registerNodeType("basic/object_keys",y);v.title="Merge Objects";v.desc="Creates an object copying properties from others";v.prototype.onExecute=function(){var a=this.getInputData(0),b=this.getInputData(1),d=this._result;if(a)for(var g in a)d[g]=a[g];if(b)for(g in b)d[g]=b[g];this.setOutputData(0,d)};g.registerNodeType("basic/merge_objects",v);G.title="Variable";G.desc="store/read variable value";
|
||||
G.prototype.onExecute=function(){this.value=this.getInputData(0);this.graph&&(this.graph.vars[this.properties.varname]=this.value);this.properties.global&&(B[this.properties.varname]=this.value);this.setOutputData(0,this.value)};G.prototype.getTitle=function(){return this.properties.varname};g.registerNodeType("basic/variable",G);g.wrapFunctionAsNode("basic/length",function(a){return a&&null!=a.length?Number(a.length):0},["*"],"number");q.title="Download";q.desc="Download some data";q.prototype.downloadAsFile=
|
||||
function(){if(null!=this.value){var a=null,a=this.value.constructor===String?this.value:JSON.stringify(this.value),a=new Blob([a]),b=URL.createObjectURL(a),a=document.createElement("a");a.setAttribute("href",b);a.setAttribute("download",this.properties.filename);a.style.display="none";document.body.appendChild(a);a.click();document.body.removeChild(a);setTimeout(function(){URL.revokeObjectURL(b)},6E4)}};q.prototype.onAction=function(a,b){var d=this;setTimeout(function(){d.downloadAsFile()},100)};
|
||||
q.prototype.onExecute=function(){this.inputs[0]&&(this.value=this.getInputData(0))};q.prototype.getTitle=function(){return this.flags.collapsed?this.properties.filename:this.title};g.registerNodeType("basic/download",q);p.title="Watch";p.desc="Show value of input";p.prototype.onExecute=function(){this.inputs[0]&&(this.value=this.getInputData(0))};p.prototype.getTitle=function(){return this.flags.collapsed?this.inputs[0].label:this.title};p.toString=function(a){if(null==a)return"null";if(a.constructor===
|
||||
Number)return a.toFixed(3);if(a.constructor===Array){for(var b="[",d=0;d<a.length;++d)b+=p.toString(a[d])+(d+1!=a.length?",":"");return b+"]"}return String(a)};p.prototype.onDrawBackground=function(a){this.inputs[0].label=p.toString(this.value)};g.registerNodeType("basic/watch",p);k.title="Cast";k.desc="Allows to connect different types";k.prototype.onExecute=function(){this.setOutputData(0,this.getInputData(0))};g.registerNodeType("basic/cast",k);a.title="Console";a.desc="Show value inside the console";
|
||||
G.prototype.onExecute=function(){this.value=this.getInputData(0);this.graph&&(this.graph.vars[this.properties.varname]=this.value);this.properties.global&&(B[this.properties.varname]=this.value);this.setOutputData(0,this.value)};G.prototype.getTitle=function(){return this.properties.varname};g.registerNodeType("basic/variable",G);g.wrapFunctionAsNode("basic/length",function(a){return a&&null!=a.length?Number(a.length):0},["*"],"number");p.title="Download";p.desc="Download some data";p.prototype.downloadAsFile=
|
||||
function(){if(null!=this.value){var a=null,a=this.value.constructor===String?this.value:JSON.stringify(this.value),a=new Blob([a]),b=URL.createObjectURL(a),a=document.createElement("a");a.setAttribute("href",b);a.setAttribute("download",this.properties.filename);a.style.display="none";document.body.appendChild(a);a.click();document.body.removeChild(a);setTimeout(function(){URL.revokeObjectURL(b)},6E4)}};p.prototype.onAction=function(a,b){var d=this;setTimeout(function(){d.downloadAsFile()},100)};
|
||||
p.prototype.onExecute=function(){this.inputs[0]&&(this.value=this.getInputData(0))};p.prototype.getTitle=function(){return this.flags.collapsed?this.properties.filename:this.title};g.registerNodeType("basic/download",p);q.title="Watch";q.desc="Show value of input";q.prototype.onExecute=function(){this.inputs[0]&&(this.value=this.getInputData(0))};q.prototype.getTitle=function(){return this.flags.collapsed?this.inputs[0].label:this.title};q.toString=function(a){if(null==a)return"null";if(a.constructor===
|
||||
Number)return a.toFixed(3);if(a.constructor===Array){for(var b="[",d=0;d<a.length;++d)b+=q.toString(a[d])+(d+1!=a.length?",":"");return b+"]"}return String(a)};q.prototype.onDrawBackground=function(a){this.inputs[0].label=q.toString(this.value)};g.registerNodeType("basic/watch",q);k.title="Cast";k.desc="Allows to connect different types";k.prototype.onExecute=function(){this.setOutputData(0,this.getInputData(0))};g.registerNodeType("basic/cast",k);a.title="Console";a.desc="Show value inside the console";
|
||||
a.prototype.onAction=function(a,b){"log"==a?console.log(b):"warn"==a?console.warn(b):"error"==a&&console.error(b)};a.prototype.onExecute=function(){var a=this.getInputData(1);null!==a&&(this.properties.msg=a);console.log(a)};a.prototype.onGetInputs=function(){return[["log",g.ACTION],["warn",g.ACTION],["error",g.ACTION]]};g.registerNodeType("basic/console",a);b.title="Alert";b.desc="Show an alert window";b.color="#510";b.prototype.onConfigure=function(a){this.widget.value=a.properties.msg};b.prototype.onAction=
|
||||
function(a,b){var d=this.properties.msg;setTimeout(function(){alert(d)},10)};g.registerNodeType("basic/alert",b);d.prototype.onConfigure=function(a){a.properties.onExecute&&g.allow_scripts?this.compileCode(a.properties.onExecute):console.warn("Script not compiled, LiteGraph.allow_scripts is false")};d.title="Script";d.desc="executes a code (max 100 characters)";d.widgets_info={onExecute:{type:"code"}};d.prototype.onPropertyChanged=function(a,b){"onExecute"==a&&g.allow_scripts?this.compileCode(b):
|
||||
console.warn("Script not compiled, LiteGraph.allow_scripts is false")};d.prototype.compileCode=function(a){this._func=null;if(256<a.length)console.warn("Script too long, max 256 chars");else{for(var b=a.toLowerCase(),d="script body document eval nodescript function".split(" "),g=0;g<d.length;++g)if(-1!=b.indexOf(d[g])){console.warn("invalid script");return}try{this._func=new Function("A","B","C","DATA","node",a)}catch(c){console.error("Error parsing script"),console.error(c)}}};d.prototype.onExecute=
|
||||
@@ -331,7 +331,7 @@ c.strokeRect(0.5*(m[0]+1)*this.size[0]-4,0.5*(m[1]+1)*this.size[1]-4,8,8);l=this
|
||||
function x(){this.addOutput("value","number");this.addProperty("min",0);this.addProperty("max",1);this.size=[80,30]}function e(){this.addInput("in","number");this.addOutput("out","number");this.addProperty("min",0);this.addProperty("max",1);this.addProperty("smooth",!0);this.size=[90,30]}function C(){this.addOutput("out","number");this.addProperty("min_time",1);this.addProperty("max_time",2);this.addProperty("duration",0.2);this.size=[90,30];this._blink_time=this._remaining_time=0}function w(){this.addInput("in",
|
||||
"number");this.addOutput("out","number");this.size=[80,30];this.addProperty("min",0);this.addProperty("max",1)}function u(){this.properties={f:0.5};this.addInput("A","number");this.addInput("B","number");this.addOutput("out","number")}function D(){this.addInput("in","number");this.addOutput("out","number");this.size=[80,30]}function A(){this.addInput("in","number");this.addOutput("out","number");this.size=[80,30]}function h(){this.addInput("in","number");this.addOutput("out","number");this.size=[80,
|
||||
30]}function z(){this.addInput("in","number");this.addOutput("out","number");this.size=[80,30];this.properties={A:0,B:1}}function y(){this.addInput("in","number",{label:""});this.addOutput("out","number",{label:""});this.size=[80,30];this.addProperty("factor",1)}function v(){this.addInput("v","boolean");this.addInput("A");this.addInput("B");this.addOutput("out")}function G(){this.addInput("in","number");this.addOutput("out","number");this.size=[80,30];this.addProperty("samples",10);this._values=new Float32Array(10);
|
||||
this._current=0}function q(){this.addInput("in","number");this.addOutput("out","number");this.addProperty("factor",0.1);this.size=[80,30];this._value=null}function p(){this.addInput("A","number");this.addInput("B","number");this.addOutput("=","number");this.addProperty("A",1);this.addProperty("B",1);this.addProperty("OP","+","enum",{values:p.values})}function k(){this.addInput("A","number");this.addInput("B","number");this.addOutput("A==B","boolean");this.addOutput("A!=B","boolean");this.addProperty("A",
|
||||
this._current=0}function p(){this.addInput("in","number");this.addOutput("out","number");this.addProperty("factor",0.1);this.size=[80,30];this._value=null}function q(){this.addInput("A","number");this.addInput("B","number");this.addOutput("=","number");this.addProperty("A",1);this.addProperty("B",1);this.addProperty("OP","+","enum",{values:q.values})}function k(){this.addInput("A","number");this.addInput("B","number");this.addOutput("A==B","boolean");this.addOutput("A!=B","boolean");this.addProperty("A",
|
||||
0);this.addProperty("B",0)}function a(){this.addInput("A","number");this.addInput("B","number");this.addOutput("true","boolean");this.addOutput("false","boolean");this.addProperty("A",1);this.addProperty("B",1);this.addProperty("OP",">","enum",{values:a.values});this.size=[80,60]}function b(){this.addInput("inc","number");this.addOutput("total","number");this.addProperty("increment",1);this.addProperty("value",0)}function d(){this.addInput("v","number");this.addOutput("sin","number");this.addProperty("amplitude",
|
||||
1);this.addProperty("offset",0);this.bgImageUrl="nodes/imgs/icon-sin.png"}function g(){this.addInput("x","number");this.addInput("y","number");this.addOutput("","number");this.properties={x:1,y:1,formula:"x+y"};this.code_widget=this.addWidget("text","F(x,y)",this.properties.formula,function(a,b,d){d.properties.formula=a});this.addWidget("toggle","allow",E.allow_scripts,function(a){E.allow_scripts=a});this._func=null}function f(){this.addInput("vec2","vec2");this.addOutput("x","number");this.addOutput("y",
|
||||
"number")}function r(){this.addInputs([["x","number"],["y","number"]]);this.addOutput("vec2","vec2");this.properties={x:0,y:0};this._data=new Float32Array(2)}function s(){this.addInput("vec3","vec3");this.addOutput("x","number");this.addOutput("y","number");this.addOutput("z","number")}function I(){this.addInputs([["x","number"],["y","number"],["z","number"]]);this.addOutput("vec3","vec3");this.properties={x:0,y:0,z:0};this._data=new Float32Array(3)}function J(){this.addInput("vec4","vec4");this.addOutput("x",
|
||||
@@ -347,10 +347,10 @@ null!=a&&(a=Math.max(this.properties.min,a),a=Math.min(this.properties.max,a),th
|
||||
(d=c);this.setOutputData(0,a*(1-d)+b*d)};u.prototype.onGetInputs=function(){return[["f","number"]]};E.registerNodeType("math/lerp",u);D.title="Abs";D.desc="Absolute";D.prototype.onExecute=function(){var a=this.getInputData(0);null!=a&&this.setOutputData(0,Math.abs(a))};E.registerNodeType("math/abs",D);A.title="Floor";A.desc="Floor number to remove fractional part";A.prototype.onExecute=function(){var a=this.getInputData(0);null!=a&&this.setOutputData(0,Math.floor(a))};E.registerNodeType("math/floor",
|
||||
A);h.title="Frac";h.desc="Returns fractional part";h.prototype.onExecute=function(){var a=this.getInputData(0);null!=a&&this.setOutputData(0,a%1)};E.registerNodeType("math/frac",h);z.title="Smoothstep";z.desc="Smoothstep";z.prototype.onExecute=function(){var a=this.getInputData(0);if(void 0!==a){var b=this.properties.A,a=Math.clamp((a-b)/(this.properties.B-b),0,1);this.setOutputData(0,a*a*(3-2*a))}};E.registerNodeType("math/smoothstep",z);y.title="Scale";y.desc="v * factor";y.prototype.onExecute=
|
||||
function(){var a=this.getInputData(0);null!=a&&this.setOutputData(0,a*this.properties.factor)};E.registerNodeType("math/scale",y);v.title="Gate";v.desc="if v is true, then outputs A, otherwise B";v.prototype.onExecute=function(){var a=this.getInputData(0);this.setOutputData(0,this.getInputData(a?1:2))};E.registerNodeType("math/gate",v);G.title="Average";G.desc="Average Filter";G.prototype.onExecute=function(){var a=this.getInputData(0);null==a&&(a=0);var b=this._values.length;this._values[this._current%
|
||||
b]=a;this._current+=1;this._current>b&&(this._current=0);for(var d=a=0;d<b;++d)a+=this._values[d];this.setOutputData(0,a/b)};G.prototype.onPropertyChanged=function(a,b){1>b&&(b=1);this.properties.samples=Math.round(b);var d=this._values;this._values=new Float32Array(this.properties.samples);d.length<=this._values.length?this._values.set(d):this._values.set(d.subarray(0,this._values.length))};E.registerNodeType("math/average",G);q.title="TendTo";q.desc="moves the output value always closer to the input";
|
||||
q.prototype.onExecute=function(){var a=this.getInputData(0);null==a&&(a=0);var b=this.properties.factor;this._value=null==this._value?a:this._value*(1-b)+a*b;this.setOutputData(0,this._value)};E.registerNodeType("math/tendTo",q);p.values="+ - * / % ^ max min".split(" ");p.title="Operation";p.desc="Easy math operators";p["@OP"]={type:"enum",title:"operation",values:p.values};p.size=[100,60];p.prototype.getTitle=function(){return"max"==this.properties.OP||"min"==this.properties.OP?this.properties.OP+
|
||||
"(A,B)":"A "+this.properties.OP+" B"};p.prototype.setValue=function(a){"string"==typeof a&&(a=parseFloat(a));this.properties.value=a};p.prototype.onExecute=function(){var a=this.getInputData(0),b=this.getInputData(1);null!=a?this.properties.A=a:a=this.properties.A;null!=b?this.properties.B=b:b=this.properties.B;var d=0;switch(this.properties.OP){case "+":d=a+b;break;case "-":d=a-b;break;case "x":case "X":case "*":d=a*b;break;case "/":d=a/b;break;case "%":d=a%b;break;case "^":d=Math.pow(a,b);break;
|
||||
case "max":d=Math.max(a,b);break;case "min":d=Math.min(a,b);break;default:console.warn("Unknown operation: "+this.properties.OP)}this.setOutputData(0,d)};p.prototype.onDrawBackground=function(a){this.flags.collapsed||(a.font="40px Arial",a.fillStyle="#666",a.textAlign="center",a.fillText(this.properties.OP,0.5*this.size[0],0.5*(this.size[1]+E.NODE_TITLE_HEIGHT)),a.textAlign="left")};E.registerNodeType("math/operation",p);E.registerSearchboxExtra("math/operation","MAX",{properties:{OP:"max"},title:"MAX()"});
|
||||
b]=a;this._current+=1;this._current>b&&(this._current=0);for(var d=a=0;d<b;++d)a+=this._values[d];this.setOutputData(0,a/b)};G.prototype.onPropertyChanged=function(a,b){1>b&&(b=1);this.properties.samples=Math.round(b);var d=this._values;this._values=new Float32Array(this.properties.samples);d.length<=this._values.length?this._values.set(d):this._values.set(d.subarray(0,this._values.length))};E.registerNodeType("math/average",G);p.title="TendTo";p.desc="moves the output value always closer to the input";
|
||||
p.prototype.onExecute=function(){var a=this.getInputData(0);null==a&&(a=0);var b=this.properties.factor;this._value=null==this._value?a:this._value*(1-b)+a*b;this.setOutputData(0,this._value)};E.registerNodeType("math/tendTo",p);q.values="+ - * / % ^ max min".split(" ");q.title="Operation";q.desc="Easy math operators";q["@OP"]={type:"enum",title:"operation",values:q.values};q.size=[100,60];q.prototype.getTitle=function(){return"max"==this.properties.OP||"min"==this.properties.OP?this.properties.OP+
|
||||
"(A,B)":"A "+this.properties.OP+" B"};q.prototype.setValue=function(a){"string"==typeof a&&(a=parseFloat(a));this.properties.value=a};q.prototype.onExecute=function(){var a=this.getInputData(0),b=this.getInputData(1);null!=a?this.properties.A=a:a=this.properties.A;null!=b?this.properties.B=b:b=this.properties.B;var d=0;switch(this.properties.OP){case "+":d=a+b;break;case "-":d=a-b;break;case "x":case "X":case "*":d=a*b;break;case "/":d=a/b;break;case "%":d=a%b;break;case "^":d=Math.pow(a,b);break;
|
||||
case "max":d=Math.max(a,b);break;case "min":d=Math.min(a,b);break;default:console.warn("Unknown operation: "+this.properties.OP)}this.setOutputData(0,d)};q.prototype.onDrawBackground=function(a){this.flags.collapsed||(a.font="40px Arial",a.fillStyle="#666",a.textAlign="center",a.fillText(this.properties.OP,0.5*this.size[0],0.5*(this.size[1]+E.NODE_TITLE_HEIGHT)),a.textAlign="left")};E.registerNodeType("math/operation",q);E.registerSearchboxExtra("math/operation","MAX",{properties:{OP:"max"},title:"MAX()"});
|
||||
E.registerSearchboxExtra("math/operation","MIN",{properties:{OP:"min"},title:"MIN()"});k.title="Compare";k.desc="compares between two values";k.prototype.onExecute=function(){var a=this.getInputData(0),b=this.getInputData(1);void 0!==a?this.properties.A=a:a=this.properties.A;void 0!==b?this.properties.B=b:b=this.properties.B;for(var d=0,c=this.outputs.length;d<c;++d){var g=this.outputs[d];if(g.links&&g.links.length){var f;switch(g.name){case "A==B":f=a==b;break;case "A!=B":f=a!=b;break;case "A>B":f=
|
||||
a>b;break;case "A<B":f=a<b;break;case "A<=B":f=a<=b;break;case "A>=B":f=a>=b}this.setOutputData(d,f)}}};k.prototype.onGetOutputs=function(){return[["A==B","boolean"],["A!=B","boolean"],["A>B","boolean"],["A<B","boolean"],["A>=B","boolean"],["A<=B","boolean"]]};E.registerNodeType("math/compare",k);E.registerSearchboxExtra("math/compare","==",{outputs:[["A==B","boolean"]],title:"A==B"});E.registerSearchboxExtra("math/compare","!=",{outputs:[["A!=B","boolean"]],title:"A!=B"});E.registerSearchboxExtra("math/compare",
|
||||
">",{outputs:[["A>B","boolean"]],title:"A>B"});E.registerSearchboxExtra("math/compare","<",{outputs:[["A<B","boolean"]],title:"A<B"});E.registerSearchboxExtra("math/compare",">=",{outputs:[["A>=B","boolean"]],title:"A>=B"});E.registerSearchboxExtra("math/compare","<=",{outputs:[["A<=B","boolean"]],title:"A<=B"});a.values="> < == != <= >= || &&".split(" ");a["@OP"]={type:"enum",title:"operation",values:a.values};a.title="Condition";a.desc="evaluates condition between A and B";a.prototype.getTitle=
|
||||
@@ -391,19 +391,19 @@ m.desc="select one element from a sequence from a string";m.prototype.onProperty
|
||||
"image"],["img2","image"],["fade","number"]]);this.addOutput("","image");this.properties={fade:0.5,width:512,height:512}}function e(){this.addInput("","image");this.addOutput("","image");this.properties={width:256,height:256,x:0,y:0,scale:1};this.size=[50,20]}function C(){this.addInput("clear",h.ACTION);this.addOutput("","canvas");this.properties={width:512,height:512,autoclear:!0};this.canvas=document.createElement("canvas");this.ctx=this.canvas.getContext("2d")}function w(){this.addInput("canvas",
|
||||
"canvas");this.addInput("img","image,canvas");this.addInput("x","number");this.addInput("y","number");this.properties={x:0,y:0,opacity:1}}function u(){this.addInput("canvas","canvas");this.addInput("x","number");this.addInput("y","number");this.addInput("w","number");this.addInput("h","number");this.properties={x:0,y:0,w:10,h:10,color:"white",opacity:1}}function D(){this.addInput("t","number");this.addOutputs([["frame","image"],["t","number"],["d","number"]]);this.properties={url:"",use_proxy:!0}}
|
||||
function A(){this.addOutput("Webcam","image");this.properties={facingMode:"user"};this.boxcolor="black";this.frame=0}var h=B.LiteGraph;c.title="Plot";c.desc="Plots data over time";c.colors=["#FFF","#F99","#9F9","#99F"];c.prototype.onExecute=function(c){if(!this.flags.collapsed){c=this.size;for(var e=0;4>e;++e){var h=this.getInputData(e);if(null!=h){var l=this.values[e];l.push(h);l.length>c[0]&&l.shift()}}}};c.prototype.onDrawBackground=function(e){if(!this.flags.collapsed){var h=this.size,l=0.5*h[1]/
|
||||
this.properties.scale,n=c.colors,q=0.5*h[1];e.fillStyle="#000";e.fillRect(0,0,h[0],h[1]);e.strokeStyle="#555";e.beginPath();e.moveTo(0,q);e.lineTo(h[0],q);e.stroke();if(this.inputs)for(var p=0;4>p;++p){var k=this.values[p];if(this.inputs[p]&&this.inputs[p].link){e.strokeStyle=n[p];e.beginPath();var a=k[0]*l*-1+q;e.moveTo(0,Math.clamp(a,0,h[1]));for(var b=1;b<k.length&&b<h[0];++b)a=k[b]*l*-1+q,e.lineTo(b,Math.clamp(a,0,h[1]));e.stroke()}}}};h.registerNodeType("graphics/plot",c);m.title="Image";m.desc=
|
||||
this.properties.scale,n=c.colors,p=0.5*h[1];e.fillStyle="#000";e.fillRect(0,0,h[0],h[1]);e.strokeStyle="#555";e.beginPath();e.moveTo(0,p);e.lineTo(h[0],p);e.stroke();if(this.inputs)for(var q=0;4>q;++q){var k=this.values[q];if(this.inputs[q]&&this.inputs[q].link){e.strokeStyle=n[q];e.beginPath();var a=k[0]*l*-1+p;e.moveTo(0,Math.clamp(a,0,h[1]));for(var b=1;b<k.length&&b<h[0];++b)a=k[b]*l*-1+p,e.lineTo(b,Math.clamp(a,0,h[1]));e.stroke()}}}};h.registerNodeType("graphics/plot",c);m.title="Image";m.desc=
|
||||
"Image loader";m.widgets=[{name:"load",text:"Load",type:"button"}];m.supported_extensions=["jpg","jpeg","png","gif"];m.prototype.onAdded=function(){""!=this.properties.url&&null==this.img&&this.loadImage(this.properties.url)};m.prototype.onDrawBackground=function(c){this.flags.collapsed||this.img&&5<this.size[0]&&5<this.size[1]&&this.img.width&&c.drawImage(this.img,0,0,this.size[0],this.size[1])};m.prototype.onExecute=function(){this.img||(this.boxcolor="#000");this.img&&this.img.width?this.setOutputData(0,
|
||||
this.img):this.setOutputData(0,null);this.img&&this.img.dirty&&(this.img.dirty=!1)};m.prototype.onPropertyChanged=function(c,e){this.properties[c]=e;"url"==c&&""!=e&&this.loadImage(e);return!0};m.prototype.loadImage=function(c,e){if(""==c)this.img=null;else{this.img=document.createElement("img");"http"==c.substr(0,4)&&h.proxy&&(c=h.proxy+c.substr(c.indexOf(":")+3));this.img.src=c;this.boxcolor="#F95";var l=this;this.img.onload=function(){e&&e(this);console.log("Image loaded, size: "+l.img.width+"x"+
|
||||
l.img.height);this.dirty=!0;l.boxcolor="#9F9";l.setDirtyCanvas(!0)};this.img.onerror=function(){console.log("error loading the image:"+c)}}};m.prototype.onWidget=function(c,e){"load"==e.name&&this.loadImage(this.properties.url)};m.prototype.onDropFile=function(c){var e=this;this._url&&URL.revokeObjectURL(this._url);this._url=URL.createObjectURL(c);this.properties.url=this._url;this.loadImage(this._url,function(c){e.size[1]=c.height/c.width*e.size[0]})};h.registerNodeType("graphics/image",m);n.title=
|
||||
"Palette";n.desc="Generates a color";n.prototype.onExecute=function(){var c=[];null!=this.properties.colorA&&c.push(hex2num(this.properties.colorA));null!=this.properties.colorB&&c.push(hex2num(this.properties.colorB));null!=this.properties.colorC&&c.push(hex2num(this.properties.colorC));null!=this.properties.colorD&&c.push(hex2num(this.properties.colorD));var e=this.getInputData(0);null==e&&(e=0.5);1<e?e=1:0>e&&(e=0);if(0!=c.length){var h=[0,0,0];if(0==e)h=c[0];else if(1==e)h=c[c.length-1];else{var l=
|
||||
(c.length-1)*e,e=c[Math.floor(l)],c=c[Math.floor(l)+1],l=l-Math.floor(l);h[0]=e[0]*(1-l)+c[0]*l;h[1]=e[1]*(1-l)+c[1]*l;h[2]=e[2]*(1-l)+c[2]*l}for(var q in h)h[q]/=255;this.boxcolor=colorToString(h);this.setOutputData(0,h)}};h.registerNodeType("color/palette",n);l.title="Frame";l.desc="Frame viewerew";l.widgets=[{name:"resize",text:"Resize box",type:"button"},{name:"view",text:"View Image",type:"button"}];l.prototype.onDrawBackground=function(c){this.frame&&!this.flags.collapsed&&c.drawImage(this.frame,
|
||||
(c.length-1)*e,e=c[Math.floor(l)],c=c[Math.floor(l)+1],l=l-Math.floor(l);h[0]=e[0]*(1-l)+c[0]*l;h[1]=e[1]*(1-l)+c[1]*l;h[2]=e[2]*(1-l)+c[2]*l}for(var p in h)h[p]/=255;this.boxcolor=colorToString(h);this.setOutputData(0,h)}};h.registerNodeType("color/palette",n);l.title="Frame";l.desc="Frame viewerew";l.widgets=[{name:"resize",text:"Resize box",type:"button"},{name:"view",text:"View Image",type:"button"}];l.prototype.onDrawBackground=function(c){this.frame&&!this.flags.collapsed&&c.drawImage(this.frame,
|
||||
0,0,this.size[0],this.size[1])};l.prototype.onExecute=function(){this.frame=this.getInputData(0);this.setDirtyCanvas(!0)};l.prototype.onWidget=function(c,e){if("resize"==e.name&&this.frame){var h=this.frame.width,l=this.frame.height;h||null==this.frame.videoWidth||(h=this.frame.videoWidth,l=this.frame.videoHeight);h&&l&&(this.size=[h,l]);this.setDirtyCanvas(!0,!0)}else"view"==e.name&&this.show()};l.prototype.show=function(){showElement&&this.frame&&showElement(this.frame)};h.registerNodeType("graphics/frame",
|
||||
l);x.title="Image fade";x.desc="Fades between images";x.widgets=[{name:"resizeA",text:"Resize to A",type:"button"},{name:"resizeB",text:"Resize to B",type:"button"}];x.prototype.onAdded=function(){this.createCanvas();var c=this.canvas.getContext("2d");c.fillStyle="#000";c.fillRect(0,0,this.properties.width,this.properties.height)};x.prototype.createCanvas=function(){this.canvas=document.createElement("canvas");this.canvas.width=this.properties.width;this.canvas.height=this.properties.height};x.prototype.onExecute=
|
||||
function(){var c=this.canvas.getContext("2d");this.canvas.width=this.canvas.width;var e=this.getInputData(0);null!=e&&c.drawImage(e,0,0,this.canvas.width,this.canvas.height);e=this.getInputData(2);null==e?e=this.properties.fade:this.properties.fade=e;c.globalAlpha=e;e=this.getInputData(1);null!=e&&c.drawImage(e,0,0,this.canvas.width,this.canvas.height);c.globalAlpha=1;this.setOutputData(0,this.canvas);this.setDirtyCanvas(!0)};h.registerNodeType("graphics/imagefade",x);e.title="Crop";e.desc="Crop Image";
|
||||
e.prototype.onAdded=function(){this.createCanvas()};e.prototype.createCanvas=function(){this.canvas=document.createElement("canvas");this.canvas.width=this.properties.width;this.canvas.height=this.properties.height};e.prototype.onExecute=function(){var c=this.getInputData(0);c&&(c.width?(this.canvas.getContext("2d").drawImage(c,-this.properties.x,-this.properties.y,c.width*this.properties.scale,c.height*this.properties.scale),this.setOutputData(0,this.canvas)):this.setOutputData(0,null))};e.prototype.onDrawBackground=
|
||||
function(c){this.flags.collapsed||this.canvas&&c.drawImage(this.canvas,0,0,this.canvas.width,this.canvas.height,0,0,this.size[0],this.size[1])};e.prototype.onPropertyChanged=function(c,e){this.properties[c]=e;"scale"==c?(this.properties[c]=parseFloat(e),0==this.properties[c]&&(console.error("Error in scale"),this.properties[c]=1)):this.properties[c]=parseInt(e);this.createCanvas();return!0};h.registerNodeType("graphics/cropImage",e);C.title="Canvas";C.desc="Canvas to render stuff";C.prototype.onExecute=
|
||||
function(){var c=this.canvas,e=this.properties.width|0,h=this.properties.height|0;c.width!=e&&(c.width=e);c.height!=h&&(c.height=h);this.properties.autoclear&&this.ctx.clearRect(0,0,c.width,c.height);this.setOutputData(0,c)};C.prototype.onAction=function(c,e){"clear"==c&&this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)};h.registerNodeType("graphics/canvas",C);w.title="DrawImage";w.desc="Draws image into a canvas";w.prototype.onExecute=function(){var c=this.getInputData(0);if(c){var e=
|
||||
this.getInputOrProperty("img");if(e){var h=this.getInputOrProperty("x"),l=this.getInputOrProperty("y");c.getContext("2d").drawImage(e,h,l)}}};h.registerNodeType("graphics/drawImage",w);u.title="DrawRectangle";u.desc="Draws rectangle in canvas";u.prototype.onExecute=function(){var c=this.getInputData(0);if(c){var e=this.getInputOrProperty("x"),h=this.getInputOrProperty("y"),l=this.getInputOrProperty("w"),q=this.getInputOrProperty("h");c.getContext("2d").fillRect(e,h,l,q)}};h.registerNodeType("graphics/drawRectangle",
|
||||
this.getInputOrProperty("img");if(e){var h=this.getInputOrProperty("x"),l=this.getInputOrProperty("y");c.getContext("2d").drawImage(e,h,l)}}};h.registerNodeType("graphics/drawImage",w);u.title="DrawRectangle";u.desc="Draws rectangle in canvas";u.prototype.onExecute=function(){var c=this.getInputData(0);if(c){var e=this.getInputOrProperty("x"),h=this.getInputOrProperty("y"),l=this.getInputOrProperty("w"),p=this.getInputOrProperty("h");c.getContext("2d").fillRect(e,h,l,p)}};h.registerNodeType("graphics/drawRectangle",
|
||||
u);D.title="Video";D.desc="Video playback";D.widgets=[{name:"play",text:"PLAY",type:"minibutton"},{name:"stop",text:"STOP",type:"minibutton"},{name:"demo",text:"Demo video",type:"button"},{name:"mute",text:"Mute video",type:"button"}];D.prototype.onExecute=function(){if(this.properties.url&&(this.properties.url!=this._video_url&&this.loadVideo(this.properties.url),this._video&&0!=this._video.width)){var c=this.getInputData(0);c&&0<=c&&1>=c&&(this._video.currentTime=c*this._video.duration,this._video.pause());
|
||||
this._video.dirty=!0;this.setOutputData(0,this._video);this.setOutputData(1,this._video.currentTime);this.setOutputData(2,this._video.duration);this.setDirtyCanvas(!0)}};D.prototype.onStart=function(){this.play()};D.prototype.onStop=function(){this.stop()};D.prototype.loadVideo=function(c){this._video_url=c;var e=c.substr(0,10).indexOf(":"),l="";-1!=e&&(l=c.substr(0,e));e="";l&&(e=c.substr(0,c.indexOf("/",l.length+3)),e=e.substr(l.length+3));this.properties.use_proxy&&l&&h.proxy&&e!=location.host&&
|
||||
(c=h.proxy+c.substr(c.indexOf(":")+3));this._video=document.createElement("video");this._video.src=c;this._video.type="type=video/mp4";this._video.muted=!0;this._video.autoplay=!0;var n=this;this._video.addEventListener("loadedmetadata",function(c){console.log("Duration: "+this.duration+" seconds");console.log("Size: "+this.videoWidth+","+this.videoHeight);n.setDirtyCanvas(!0);this.width=this.videoWidth;this.height=this.videoHeight});this._video.addEventListener("progress",function(c){console.log("video loading...")});
|
||||
@@ -421,7 +421,7 @@ function C(){this.addInput("in","Texture");this.addInput("warp","Texture");this.
|
||||
"Texture");this.addOutput("","Texture");this.properties={size:0,generate_mipmaps:!1,precision:c.DEFAULT}}function D(){this.addInput("Texture","Texture");this.addOutput("","Texture");this.properties={iterations:1,generate_mipmaps:!1,precision:c.DEFAULT}}function A(){this.addInput("Texture","Texture");this.addOutput("tex","Texture");this.addOutput("avg","vec4");this.addOutput("lum","number");this.properties={use_previous_frame:!0,high_quality:!1};this._uniforms={u_texture:0,u_mipmap_offset:0};this._luminance=
|
||||
new Float32Array(4)}function h(){this.addInput("Texture","Texture");this.addOutput("min_t","Texture");this.addOutput("max_t","Texture");this.addOutput("min","vec4");this.addOutput("max","vec4");this.properties={mode:"max",use_previous_frame:!0};this._uniforms={u_texture:0};this._max=new Float32Array(4);this._min=new Float32Array(4);this._textures_chain=[]}function z(){this.addInput("in","Texture");this.addInput("factor","Number");this.addOutput("out","Texture");this.properties={factor:0.5};this._uniforms=
|
||||
{u_texture:0,u_textureB:1,u_factor:this.properties.factor}}function y(){this.addInput("in","Texture");this.addOutput("avg","Texture");this.addOutput("array","Texture");this.properties={samples:64,frames_interval:1};this._uniforms={u_texture:0,u_textureB:1,u_samples:this.properties.samples,u_isamples:1/this.properties.samples};this.frame=0}function v(){this.addInput("Image","image");this.addOutput("","Texture");this.properties={}}function G(){this.addInput("Texture","Texture");this.addInput("LUT",
|
||||
"Texture");this.addInput("Intensity","number");this.addOutput("","Texture");this.properties={enabled:!0,intensity:1,precision:c.DEFAULT,texture:null};G._shader||(G._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,G.pixel_shader))}function q(){this.addInput("Texture","Texture");this.addOutput("R","Texture");this.addOutput("G","Texture");this.addOutput("B","Texture");this.addOutput("A","Texture");q._shader||(q._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,q.pixel_shader))}function p(){this.addInput("R",
|
||||
"Texture");this.addInput("Intensity","number");this.addOutput("","Texture");this.properties={enabled:!0,intensity:1,precision:c.DEFAULT,texture:null};G._shader||(G._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,G.pixel_shader))}function p(){this.addInput("Texture","Texture");this.addOutput("R","Texture");this.addOutput("G","Texture");this.addOutput("B","Texture");this.addOutput("A","Texture");p._shader||(p._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,p.pixel_shader))}function q(){this.addInput("R",
|
||||
"Texture");this.addInput("G","Texture");this.addInput("B","Texture");this.addInput("A","Texture");this.addOutput("Texture","Texture");this.properties={precision:c.DEFAULT,R:1,G:1,B:1,A:1};this._color=vec4.create();this._uniforms={u_textureR:0,u_textureG:1,u_textureB:2,u_textureA:3,u_color:this._color}}function k(){this.addOutput("Texture","Texture");this._tex_color=vec4.create();this.properties={color:vec4.create(),precision:c.DEFAULT}}function a(){this.addInput("A","color");this.addInput("B","color");
|
||||
this.addOutput("Texture","Texture");this.properties={angle:0,scale:1,A:[0,0,0],B:[1,1,1],texture_size:32};a._shader||(a._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,a.pixel_shader));this._uniforms={u_angle:0,u_colorA:vec3.create(),u_colorB:vec3.create()}}function b(){this.addInput("A","Texture");this.addInput("B","Texture");this.addInput("Mixer","Texture");this.addOutput("Texture","Texture");this.properties={factor:0.5,size_from_biggest:!0,invert:!1,precision:c.DEFAULT};this._uniforms={u_textureA:0,
|
||||
u_textureB:1,u_textureMix:2,u_mix:vec4.create()}}function d(){this.addInput("Tex.","Texture");this.addOutput("Edges","Texture");this.properties={invert:!0,threshold:!1,factor:1,precision:c.DEFAULT};d._shader||(d._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,d.pixel_shader))}function g(){this.addInput("Texture","Texture");this.addInput("Distance","number");this.addInput("Range","number");this.addOutput("Texture","Texture");this.properties={distance:100,range:50,only_depth:!1,high_precision:!1};
|
||||
@@ -445,8 +445,8 @@ F.registerNodeType("texture/preview",m),n.title="Save",n.desc="Save a texture in
|
||||
a),this._texture=a,this.setOutputData(0,a),this.setOutputData(1,this.properties.name))},F.registerNodeType("texture/save",n),l.widgets_info={uvcode:{widget:"code"},pixelcode:{widget:"code"},precision:{widget:"combo",values:c.MODE_VALUES}},l.title="Operation",l.desc="Texture shader operation",l.presets={},l.prototype.getExtraMenuOptions=function(a){var b=this;return[{content:b.properties.show?"Hide Texture":"Show Texture",callback:function(){b.properties.show=!b.properties.show}}]},l.prototype.onPropertyChanged=
|
||||
function(){this.has_error=!1},l.prototype.onDrawBackground=function(a){this.flags.collapsed||20>=this.size[1]||!this.properties.show||!this._tex||this._tex.gl!=a||(a.save(),a.drawImage(this._tex,0,0,this.size[0],this.size[1]),a.restore())},l.prototype.onExecute=function(){var a=this.getInputData(0);if(this.isOutputConnected(0))if(this.properties.precision===c.PASS_THROUGH)this.setOutputData(0,a);else{var b=this.getInputData(1);if(this.properties.uvcode||this.properties.pixelcode){var d=512,g=512;
|
||||
a?(d=a.width,g=a.height):b&&(d=b.width,g=b.height);b||(b=GL.Texture.getWhiteTexture());var f=c.getTextureType(this.properties.precision,a);this._tex=a||this._tex?c.getTargetTexture(a||this._tex,this._tex,this.properties.precision):new GL.Texture(d,g,{type:f,format:gl.RGBA,filter:gl.LINEAR});f="";this.properties.uvcode&&(f="uv = "+this.properties.uvcode,-1!=this.properties.uvcode.indexOf(";")&&(f=this.properties.uvcode));var e="";this.properties.pixelcode&&(e="result = "+this.properties.pixelcode,
|
||||
-1!=this.properties.pixelcode.indexOf(";")&&(e=this.properties.pixelcode));var k=this._shader;if(!(this.has_error||k&&this._shader_code==f+"|"+e)){var h=c.replaceCode(l.pixel_shader,{UV_CODE:f,PIXEL_CODE:e});try{k=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,h),this.boxcolor="#00FF00"}catch(q){GL.Shader.dumpErrorToConsole(q,Shader.SCREEN_VERTEX_SHADER,h);this.boxcolor="#FF0000";this.has_error=!0;return}this._shader=k;this._shader_code=f+"|"+e}if(this._shader){var p=this.getInputData(2);null!=p?this.properties.value=
|
||||
p:p=parseFloat(this.properties.value);var r=this.graph.getTime();this._tex.drawTo(function(){gl.disable(gl.DEPTH_TEST);gl.disable(gl.CULL_FACE);gl.disable(gl.BLEND);a&&a.bind(0);b&&b.bind(1);var c=Mesh.getScreenQuad();k.uniforms({u_texture:0,u_textureB:1,value:p,texSize:[d,g],time:r}).draw(c)});this.setOutputData(0,this._tex)}}}},l.pixel_shader="precision highp float;\n\t\t\n\t\tuniform sampler2D u_texture;\n\t\tuniform sampler2D u_textureB;\n\t\tvarying vec2 v_coord;\n\t\tuniform vec2 texSize;\n\t\tuniform float time;\n\t\tuniform float value;\n\t\t\n\t\tvoid main() {\n\t\t\tvec2 uv = v_coord;\n\t\t\t{{UV_CODE}};\n\t\t\tvec4 color4 = texture2D(u_texture, uv);\n\t\t\tvec3 color = color4.rgb;\n\t\t\tvec4 color4B = texture2D(u_textureB, uv);\n\t\t\tvec3 colorB = color4B.rgb;\n\t\t\tvec3 result = color;\n\t\t\tfloat alpha = 1.0;\n\t\t\t{{PIXEL_CODE}};\n\t\t\tgl_FragColor = vec4(result, alpha);\n\t\t}\n\t\t",
|
||||
-1!=this.properties.pixelcode.indexOf(";")&&(e=this.properties.pixelcode));var k=this._shader;if(!(this.has_error||k&&this._shader_code==f+"|"+e)){var h=c.replaceCode(l.pixel_shader,{UV_CODE:f,PIXEL_CODE:e});try{k=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,h),this.boxcolor="#00FF00"}catch(p){GL.Shader.dumpErrorToConsole(p,Shader.SCREEN_VERTEX_SHADER,h);this.boxcolor="#FF0000";this.has_error=!0;return}this._shader=k;this._shader_code=f+"|"+e}if(this._shader){var q=this.getInputData(2);null!=q?this.properties.value=
|
||||
q:q=parseFloat(this.properties.value);var r=this.graph.getTime();this._tex.drawTo(function(){gl.disable(gl.DEPTH_TEST);gl.disable(gl.CULL_FACE);gl.disable(gl.BLEND);a&&a.bind(0);b&&b.bind(1);var c=Mesh.getScreenQuad();k.uniforms({u_texture:0,u_textureB:1,value:q,texSize:[d,g],time:r}).draw(c)});this.setOutputData(0,this._tex)}}}},l.pixel_shader="precision highp float;\n\t\t\n\t\tuniform sampler2D u_texture;\n\t\tuniform sampler2D u_textureB;\n\t\tvarying vec2 v_coord;\n\t\tuniform vec2 texSize;\n\t\tuniform float time;\n\t\tuniform float value;\n\t\t\n\t\tvoid main() {\n\t\t\tvec2 uv = v_coord;\n\t\t\t{{UV_CODE}};\n\t\t\tvec4 color4 = texture2D(u_texture, uv);\n\t\t\tvec3 color = color4.rgb;\n\t\t\tvec4 color4B = texture2D(u_textureB, uv);\n\t\t\tvec3 colorB = color4B.rgb;\n\t\t\tvec3 result = color;\n\t\t\tfloat alpha = 1.0;\n\t\t\t{{PIXEL_CODE}};\n\t\t\tgl_FragColor = vec4(result, alpha);\n\t\t}\n\t\t",
|
||||
l.registerPreset=function(a,b){l.presets[a]=b},l.registerPreset("",""),l.registerPreset("bypass","color"),l.registerPreset("add","color + colorB * value"),l.registerPreset("substract","(color - colorB) * value"),l.registerPreset("mate","mix( color, colorB, color4B.a * value)"),l.registerPreset("invert","vec3(1.0) - color"),l.registerPreset("multiply","color * colorB * value"),l.registerPreset("divide","(color / colorB) / value"),l.registerPreset("difference","abs(color - colorB) * value"),l.registerPreset("max",
|
||||
"max(color, colorB) * value"),l.registerPreset("min","min(color, colorB) * value"),l.registerPreset("displace","texture2D(u_texture, uv + (colorB.xy - vec2(0.5)) * value).xyz"),l.registerPreset("grayscale","vec3(color.x + color.y + color.z) * value / 3.0"),l.registerPreset("saturation","mix( vec3(color.x + color.y + color.z) / 3.0, color, value )"),l.registerPreset("threshold","vec3(color.x > colorB.x * value ? 1.0 : 0.0,color.y > colorB.y * value ? 1.0 : 0.0,color.z > colorB.z * value ? 1.0 : 0.0)"),
|
||||
l.prototype.onInspect=function(a){var b=this;a.addCombo("Presets","",{values:Object.keys(l.presets),callback:function(d){var c=l.presets[d];c&&(b.setProperty("pixelcode",c),b.title=d,a.refresh())}})},F.registerNodeType("texture/operation",l),x.title="Shader",x.desc="Texture shader",x.widgets_info={code:{type:"code",lang:"glsl"},precision:{widget:"combo",values:c.MODE_VALUES}},x.prototype.onPropertyChanged=function(a,b){if("code"==a){var d=this.getShader();if(d){var c=d.uniformInfo;if(this.inputs)for(var g=
|
||||
@@ -467,7 +467,7 @@ w.gamma_pixel_shader="precision highp float;\n\t\tprecision highp float;\n\t\tva
|
||||
values:c.MODE_VALUES}},u.prototype.onExecute=function(){var a=this.getInputData(0);if((a||this._temp_texture)&&this.isOutputConnected(0)){if(a){var b=a.width,d=a.height;0!=this.properties.size&&(d=b=this.properties.size);var g=this._temp_texture,f=a.type;this.properties.precision===c.LOW?f=gl.UNSIGNED_BYTE:this.properties.precision===c.HIGH&&(f=gl.HIGH_PRECISION_FORMAT);g&&g.width==b&&g.height==d&&g.type==f||(g=gl.LINEAR,this.properties.generate_mipmaps&&isPowerOfTwo(b)&&isPowerOfTwo(d)&&(g=gl.LINEAR_MIPMAP_LINEAR),
|
||||
this._temp_texture=new GL.Texture(b,d,{type:f,format:gl.RGBA,minFilter:g,magFilter:gl.LINEAR}));a.copyTo(this._temp_texture);this.properties.generate_mipmaps&&(this._temp_texture.bind(0),gl.generateMipmap(this._temp_texture.texture_type),this._temp_texture.unbind(0))}this.setOutputData(0,this._temp_texture)}},F.registerNodeType("texture/copy",u),D.title="Downsample",D.desc="Downsample Texture",D.widgets_info={iterations:{type:"number",step:1,precision:0,min:0},precision:{widget:"combo",values:c.MODE_VALUES}},
|
||||
D.prototype.onExecute=function(){var a=this.getInputData(0);if((a||this._temp_texture)&&this.isOutputConnected(0)&&a&&a.texture_type===GL.TEXTURE_2D)if(1>this.properties.iterations)this.setOutputData(0,a);else{var b=D._shader;b||(D._shader=b=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,D.pixel_shader));var d=a.width|0,g=a.height|0,f=a.type;this.properties.precision===c.LOW?f=gl.UNSIGNED_BYTE:this.properties.precision===c.HIGH&&(f=gl.HIGH_PRECISION_FORMAT);var e=this.properties.iterations||1,k=a,h=
|
||||
null,l=[],a={type:f,format:a.format},f=vec2.create(),q={u_offset:f};this._texture&&GL.Texture.releaseTemporary(this._texture);for(var p=0;p<e;++p){f[0]=1/d;f[1]=1/g;d=d>>1||0;g=g>>1||0;h=GL.Texture.getTemporary(d,g,a);l.push(h);k.setParameter(GL.TEXTURE_MAG_FILTER,GL.NEAREST);k.copyTo(h,b,q);if(1==d&&1==g)break;k=h}this._texture=l.pop();for(p=0;p<l.length;++p)GL.Texture.releaseTemporary(l[p]);this.properties.generate_mipmaps&&(this._texture.bind(0),gl.generateMipmap(this._texture.texture_type),this._texture.unbind(0));
|
||||
null,l=[],a={type:f,format:a.format},f=vec2.create(),p={u_offset:f};this._texture&&GL.Texture.releaseTemporary(this._texture);for(var q=0;q<e;++q){f[0]=1/d;f[1]=1/g;d=d>>1||0;g=g>>1||0;h=GL.Texture.getTemporary(d,g,a);l.push(h);k.setParameter(GL.TEXTURE_MAG_FILTER,GL.NEAREST);k.copyTo(h,b,p);if(1==d&&1==g)break;k=h}this._texture=l.pop();for(q=0;q<l.length;++q)GL.Texture.releaseTemporary(l[q]);this.properties.generate_mipmaps&&(this._texture.bind(0),gl.generateMipmap(this._texture.texture_type),this._texture.unbind(0));
|
||||
this.setOutputData(0,this._texture)}},D.pixel_shader="precision highp float;\n\t\tprecision highp float;\n\t\tuniform sampler2D u_texture;\n\t\tuniform vec2 u_offset;\n\t\tvarying vec2 v_coord;\n\t\t\n\t\tvoid main() {\n\t\t\tvec4 color = texture2D(u_texture, v_coord );\n\t\t\tcolor += texture2D(u_texture, v_coord + vec2( u_offset.x, 0.0 ) );\n\t\t\tcolor += texture2D(u_texture, v_coord + vec2( 0.0, u_offset.y ) );\n\t\t\tcolor += texture2D(u_texture, v_coord + vec2( u_offset.x, u_offset.y ) );\n\t\t gl_FragColor = color * 0.25;\n\t\t}\n\t\t",
|
||||
F.registerNodeType("texture/downsample",D),A.title="Average",A.desc="Compute a partial average (32 random samples) of a texture and stores it as a 1x1 pixel texture.\n If high_quality is true, then it generates the mipmaps first and reads from the lower one.",A.prototype.onExecute=function(){this.properties.use_previous_frame||this.updateAverage();var a=this._luminance;this.setOutputData(0,this._temp_texture);this.setOutputData(1,a);this.setOutputData(2,(a[0]+a[1]+a[2])/3)},A.prototype.onPreRenderExecute=
|
||||
function(){this.updateAverage()},A.prototype.updateAverage=function(){var a=this.getInputData(0);if(a&&(this.isOutputConnected(0)||this.isOutputConnected(1)||this.isOutputConnected(2))){if(!A._shader){A._shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,A.pixel_shader);for(var b=new Float32Array(16),d=0;d<b.length;++d)b[d]=Math.random();A._shader.uniforms({u_samples_a:b.subarray(0,16),u_samples_b:b.subarray(16,32)})}d=this._temp_texture;b=gl.UNSIGNED_BYTE;a.type!=b&&(b=gl.FLOAT);d&&d.type==b||(this._temp_texture=
|
||||
@@ -486,12 +486,12 @@ y),v.title="Image to Texture",v.desc="Uploads an image to the GPU",v.prototype.o
|
||||
return}this.setOutputData(0,this._temp_texture)}}},F.registerNodeType("texture/imageToTexture",v),G.widgets_info={texture:{widget:"texture"},precision:{widget:"combo",values:c.MODE_VALUES}},G.title="LUT",G.desc="Apply LUT to Texture",G.prototype.onExecute=function(){if(this.isOutputConnected(0)){var a=this.getInputData(0);if(this.properties.precision===c.PASS_THROUGH||!1===this.properties.enabled)this.setOutputData(0,a);else if(a){var b=this.getInputData(1);b||(b=c.getTexture(this.properties.texture));
|
||||
if(b){b.bind(0);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.bindTexture(gl.TEXTURE_2D,null);var d=this.properties.intensity;this.isInputConnected(2)&&(this.properties.intensity=d=this.getInputData(2));this._tex=c.getTargetTexture(a,this._tex,this.properties.precision);this._tex.drawTo(function(){b.bind(1);a.toViewport(G._shader,{u_texture:0,u_textureB:1,
|
||||
u_amount:d})});this.setOutputData(0,this._tex)}else this.setOutputData(0,a)}}},G.pixel_shader="precision highp float;\n\t\tprecision highp float;\n\t\tvarying vec2 v_coord;\n\t\tuniform sampler2D u_texture;\n\t\tuniform sampler2D u_textureB;\n\t\tuniform float u_amount;\n\t\t\n\t\tvoid main() {\n\t\t\t lowp vec4 textureColor = clamp( texture2D(u_texture, v_coord), vec4(0.0), vec4(1.0) );\n\t\t\t mediump float blueColor = textureColor.b * 63.0;\n\t\t\t mediump vec2 quad1;\n\t\t\t quad1.y = floor(floor(blueColor) / 8.0);\n\t\t\t quad1.x = floor(blueColor) - (quad1.y * 8.0);\n\t\t\t mediump vec2 quad2;\n\t\t\t quad2.y = floor(ceil(blueColor) / 8.0);\n\t\t\t quad2.x = ceil(blueColor) - (quad2.y * 8.0);\n\t\t\t highp vec2 texPos1;\n\t\t\t texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.r);\n\t\t\t texPos1.y = 1.0 - ((quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.g));\n\t\t\t highp vec2 texPos2;\n\t\t\t texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.r);\n\t\t\t texPos2.y = 1.0 - ((quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.g));\n\t\t\t lowp vec4 newColor1 = texture2D(u_textureB, texPos1);\n\t\t\t lowp vec4 newColor2 = texture2D(u_textureB, texPos2);\n\t\t\t lowp vec4 newColor = mix(newColor1, newColor2, fract(blueColor));\n\t\t\t gl_FragColor = vec4( mix( textureColor.rgb, newColor.rgb, u_amount), textureColor.w);\n\t\t}\n\t\t",
|
||||
F.registerNodeType("texture/LUT",G),q.title="Texture to Channels",q.desc="Split texture channels",q.prototype.onExecute=function(){var a=this.getInputData(0);if(a){this._channels||(this._channels=Array(4));for(var b=gl.RGB,d=0,c=0;4>c;c++)this.isOutputConnected(c)?(this._channels[c]&&this._channels[c].width==a.width&&this._channels[c].height==a.height&&this._channels[c].type==a.type&&this._channels[c].format==b||(this._channels[c]=new GL.Texture(a.width,a.height,{type:a.type,format:b,filter:gl.LINEAR})),
|
||||
d++):this._channels[c]=null;if(d){gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);for(var g=Mesh.getScreenQuad(),f=q._shader,e=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],c=0;4>c;c++)this._channels[c]&&(this._channels[c].drawTo(function(){a.bind(0);f.uniforms({u_texture:0,u_mask:e[c]}).draw(g)}),this.setOutputData(c,this._channels[c]))}}},q.pixel_shader="precision highp float;\n\t\tprecision highp float;\n\t\tvarying vec2 v_coord;\n\t\tuniform sampler2D u_texture;\n\t\tuniform vec4 u_mask;\n\t\t\n\t\tvoid main() {\n\t\t gl_FragColor = vec4( vec3( length( texture2D(u_texture, v_coord) * u_mask )), 1.0 );\n\t\t}\n\t\t",
|
||||
F.registerNodeType("texture/textureChannels",q),p.title="Channels to Texture",p.desc="Split texture channels",p.widgets_info={precision:{widget:"combo",values:c.MODE_VALUES}},p.prototype.onExecute=function(){var a=c.getWhiteTexture(),b=this.getInputData(0)||a,d=this.getInputData(1)||a,g=this.getInputData(2)||a,f=this.getInputData(3)||a;gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);var e=Mesh.getScreenQuad();p._shader||(p._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,p.pixel_shader));var k=p._shader,
|
||||
a=Math.max(b.width,d.width,g.width,f.width),h=Math.max(b.height,d.height,g.height,f.height),l=this.properties.precision==c.HIGH?c.HIGH_PRECISION_FORMAT:gl.UNSIGNED_BYTE;this._texture&&this._texture.width==a&&this._texture.height==h&&this._texture.type==l||(this._texture=new GL.Texture(a,h,{type:l,format:gl.RGBA,filter:gl.LINEAR}));a=this._color;a[0]=this.properties.R;a[1]=this.properties.G;a[2]=this.properties.B;a[3]=this.properties.A;var q=this._uniforms;this._texture.drawTo(function(){b.bind(0);
|
||||
d.bind(1);g.bind(2);f.bind(3);k.uniforms(q).draw(e)});this.setOutputData(0,this._texture)},p.pixel_shader="precision highp float;\n\t\tprecision highp float;\n\t\tvarying vec2 v_coord;\n\t\tuniform sampler2D u_textureR;\n\t\tuniform sampler2D u_textureG;\n\t\tuniform sampler2D u_textureB;\n\t\tuniform sampler2D u_textureA;\n\t\tuniform vec4 u_color;\n\t\t\n\t\tvoid main() {\n\t\t gl_FragColor = u_color * vec4( \t\t\t\t\ttexture2D(u_textureR, v_coord).r,\t\t\t\t\ttexture2D(u_textureG, v_coord).r,\t\t\t\t\ttexture2D(u_textureB, v_coord).r,\t\t\t\t\ttexture2D(u_textureA, v_coord).r);\n\t\t}\n\t\t",
|
||||
F.registerNodeType("texture/channelsTexture",p),k.title="Color",k.desc="Generates a 1x1 texture with a constant color",k.widgets_info={precision:{widget:"combo",values:c.MODE_VALUES}},k.prototype.onDrawBackground=function(a){var b=this.properties.color;a.fillStyle="rgb("+Math.floor(255*Math.clamp(b[0],0,1))+","+Math.floor(255*Math.clamp(b[1],0,1))+","+Math.floor(255*Math.clamp(b[2],0,1))+")";this.flags.collapsed?this.boxcolor=a.fillStyle:a.fillRect(0,0,this.size[0],this.size[1])},k.prototype.onExecute=
|
||||
F.registerNodeType("texture/LUT",G),p.title="Texture to Channels",p.desc="Split texture channels",p.prototype.onExecute=function(){var a=this.getInputData(0);if(a){this._channels||(this._channels=Array(4));for(var b=gl.RGB,d=0,c=0;4>c;c++)this.isOutputConnected(c)?(this._channels[c]&&this._channels[c].width==a.width&&this._channels[c].height==a.height&&this._channels[c].type==a.type&&this._channels[c].format==b||(this._channels[c]=new GL.Texture(a.width,a.height,{type:a.type,format:b,filter:gl.LINEAR})),
|
||||
d++):this._channels[c]=null;if(d){gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);for(var g=Mesh.getScreenQuad(),f=p._shader,e=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],c=0;4>c;c++)this._channels[c]&&(this._channels[c].drawTo(function(){a.bind(0);f.uniforms({u_texture:0,u_mask:e[c]}).draw(g)}),this.setOutputData(c,this._channels[c]))}}},p.pixel_shader="precision highp float;\n\t\tprecision highp float;\n\t\tvarying vec2 v_coord;\n\t\tuniform sampler2D u_texture;\n\t\tuniform vec4 u_mask;\n\t\t\n\t\tvoid main() {\n\t\t gl_FragColor = vec4( vec3( length( texture2D(u_texture, v_coord) * u_mask )), 1.0 );\n\t\t}\n\t\t",
|
||||
F.registerNodeType("texture/textureChannels",p),q.title="Channels to Texture",q.desc="Split texture channels",q.widgets_info={precision:{widget:"combo",values:c.MODE_VALUES}},q.prototype.onExecute=function(){var a=c.getWhiteTexture(),b=this.getInputData(0)||a,d=this.getInputData(1)||a,g=this.getInputData(2)||a,f=this.getInputData(3)||a;gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);var e=Mesh.getScreenQuad();q._shader||(q._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,q.pixel_shader));var k=q._shader,
|
||||
a=Math.max(b.width,d.width,g.width,f.width),h=Math.max(b.height,d.height,g.height,f.height),l=this.properties.precision==c.HIGH?c.HIGH_PRECISION_FORMAT:gl.UNSIGNED_BYTE;this._texture&&this._texture.width==a&&this._texture.height==h&&this._texture.type==l||(this._texture=new GL.Texture(a,h,{type:l,format:gl.RGBA,filter:gl.LINEAR}));a=this._color;a[0]=this.properties.R;a[1]=this.properties.G;a[2]=this.properties.B;a[3]=this.properties.A;var p=this._uniforms;this._texture.drawTo(function(){b.bind(0);
|
||||
d.bind(1);g.bind(2);f.bind(3);k.uniforms(p).draw(e)});this.setOutputData(0,this._texture)},q.pixel_shader="precision highp float;\n\t\tprecision highp float;\n\t\tvarying vec2 v_coord;\n\t\tuniform sampler2D u_textureR;\n\t\tuniform sampler2D u_textureG;\n\t\tuniform sampler2D u_textureB;\n\t\tuniform sampler2D u_textureA;\n\t\tuniform vec4 u_color;\n\t\t\n\t\tvoid main() {\n\t\t gl_FragColor = u_color * vec4( \t\t\t\t\ttexture2D(u_textureR, v_coord).r,\t\t\t\t\ttexture2D(u_textureG, v_coord).r,\t\t\t\t\ttexture2D(u_textureB, v_coord).r,\t\t\t\t\ttexture2D(u_textureA, v_coord).r);\n\t\t}\n\t\t",
|
||||
F.registerNodeType("texture/channelsTexture",q),k.title="Color",k.desc="Generates a 1x1 texture with a constant color",k.widgets_info={precision:{widget:"combo",values:c.MODE_VALUES}},k.prototype.onDrawBackground=function(a){var b=this.properties.color;a.fillStyle="rgb("+Math.floor(255*Math.clamp(b[0],0,1))+","+Math.floor(255*Math.clamp(b[1],0,1))+","+Math.floor(255*Math.clamp(b[2],0,1))+")";this.flags.collapsed?this.boxcolor=a.fillStyle:a.fillRect(0,0,this.size[0],this.size[1])},k.prototype.onExecute=
|
||||
function(){var a=this.properties.precision==c.HIGH?c.HIGH_PRECISION_FORMAT:gl.UNSIGNED_BYTE;this._tex&&this._tex.type==a||(this._tex=new GL.Texture(1,1,{format:gl.RGBA,type:a,minFilter:gl.NEAREST}));a=this.properties.color;if(this.inputs)for(var b=0;b<this.inputs.length;b++){var d=this.inputs[b],g=this.getInputData(b);if(void 0!==g)switch(d.name){case "RGB":case "RGBA":a.set(g);break;case "R":a[0]=g;break;case "G":a[1]=g;break;case "B":a[2]=g;break;case "A":a[3]=g}}0.001<vec4.sqrDist(this._tex_color,
|
||||
a)&&(this._tex_color.set(a),this._tex.fill(a));this.setOutputData(0,this._tex)},k.prototype.onGetInputs=function(){return[["RGB","vec3"],["RGBA","vec4"],["R","number"],["G","number"],["B","number"],["A","number"]]},F.registerNodeType("texture/color",k),a.title="Gradient",a.desc="Generates a gradient",a["@A"]={type:"color"},a["@B"]={type:"color"},a["@texture_size"]={type:"enum",values:[32,64,128,256,512]},a.prototype.onExecute=function(){gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);var b=GL.Mesh.getScreenQuad(),
|
||||
d=a._shader,c=this.getInputData(0);c||(c=this.properties.A);var g=this.getInputData(1);g||(g=this.properties.B);for(var f=2;f<this.inputs.length;f++){var e=this.inputs[f],k=this.getInputData(f);void 0!==k&&(this.properties[e.name]=k)}var h=this._uniforms;this._uniforms.u_angle=this.properties.angle*DEG2RAD;this._uniforms.u_scale=this.properties.scale;vec3.copy(h.u_colorA,c);vec3.copy(h.u_colorB,g);c=parseInt(this.properties.texture_size);this._tex&&this._tex.width==c||(this._tex=new GL.Texture(c,
|
||||
@@ -511,11 +511,11 @@ F.registerNodeType("texture/linear_depth",f),r.title="Blur",r.desc="Blur a textu
|
||||
(d=this.getInputData(1),this.properties.iterations=d);d=Math.min(Math.floor(d),r.max_iterations);if(0==d)this.setOutputData(0,a);else{var c=this.properties.intensity;this.isInputConnected(2)&&(c=this.getInputData(2),this.properties.intensity=c);var g=F.camera_aspect;g||void 0===window.gl||(g=gl.canvas.height/gl.canvas.width);g||(g=1);var g=this.properties.preserve_aspect?g:1,f=this.properties.scale||[1,1];a.applyBlur(g*f[0],f[1],c,b);for(a=1;a<d;++a)b.applyBlur(g*f[0]*(a+1),f[1]*(a+1),c);this.setOutputData(0,
|
||||
b)}}},F.registerNodeType("texture/blur",r),s.title="Glow",s.desc="Filters a texture giving it a glow effect",s.weights=new Float32Array([0.5,0.4,0.3,0.2]),s.widgets_info={iterations:{type:"number",min:0,max:16,step:1,precision:0},threshold:{type:"number",min:0,max:10,step:0.01,precision:2},precision:{widget:"combo",values:c.MODE_VALUES}},s.prototype.onGetInputs=function(){return[["enabled","boolean"],["threshold","number"],["intensity","number"],["persistence","number"],["iterations","number"],["dirt_factor",
|
||||
"number"]]},s.prototype.onGetOutputs=function(){return[["average","Texture"]]},s.prototype.onExecute=function(){var a=this.getInputData(0);if(a&&this.isAnyOutputConnected())if(this.properties.precision===c.PASS_THROUGH||!1===this.getInputOrProperty("enabled"))this.setOutputData(0,a);else{var b=a.width,d=a.height,g={format:a.format,type:a.type,minFilter:GL.LINEAR,magFilter:GL.LINEAR,wrap:gl.CLAMP_TO_EDGE},f=c.getTextureType(this.properties.precision,a),e=this._uniforms,k=this._textures,h=s._cut_shader;
|
||||
h||(h=s._cut_shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,s.cut_pixel_shader));gl.disable(gl.DEPTH_TEST);gl.disable(gl.BLEND);e.u_threshold=this.getInputOrProperty("threshold");var l=k[0]=GL.Texture.getTemporary(b,d,g);a.blit(l,h.uniforms(e));var q=l,p=this.getInputOrProperty("iterations"),p=Math.clamp(p,1,16)|0,r=e.u_texel_size,n=this.getInputOrProperty("intensity");e.u_intensity=1;e.u_delta=this.properties.scale;h=s._shader;h||(h=s._shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,s.scale_pixel_shader));
|
||||
for(var m=1;m<p;m++){b>>=1;1<(d|0)&&(d>>=1);if(2>b)break;l=k[m]=GL.Texture.getTemporary(b,d,g);r[0]=1/q.width;r[1]=1/q.height;q.blit(l,h.uniforms(e));q=l}this.isOutputConnected(2)&&(b=this._average_texture,b&&b.type==a.type&&b.format==a.format||(b=this._average_texture=new GL.Texture(1,1,{type:a.type,format:a.format,filter:gl.LINEAR})),r[0]=1/q.width,r[1]=1/q.height,e.u_intensity=n,e.u_delta=1,q.blit(b,h.uniforms(e)),this.setOutputData(2,b));gl.enable(gl.BLEND);gl.blendFunc(gl.ONE,gl.ONE);e.u_intensity=
|
||||
this.getInputOrProperty("persistence");e.u_delta=0.5;for(m-=2;0<=m;m--)l=k[m],k[m]=null,r[0]=1/q.width,r[1]=1/q.height,q.blit(l,h.uniforms(e)),GL.Texture.releaseTemporary(q),q=l;gl.disable(gl.BLEND);this.isOutputConnected(1)&&(k=this._glow_texture,k&&k.width==a.width&&k.height==a.height&&k.type==f&&k.format==a.format||(k=this._glow_texture=new GL.Texture(a.width,a.height,{type:f,format:a.format,filter:gl.LINEAR})),q.blit(k),this.setOutputData(1,k));if(this.isOutputConnected(0)){k=this._final_texture;
|
||||
h||(h=s._cut_shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,s.cut_pixel_shader));gl.disable(gl.DEPTH_TEST);gl.disable(gl.BLEND);e.u_threshold=this.getInputOrProperty("threshold");var l=k[0]=GL.Texture.getTemporary(b,d,g);a.blit(l,h.uniforms(e));var p=l,q=this.getInputOrProperty("iterations"),q=Math.clamp(q,1,16)|0,r=e.u_texel_size,n=this.getInputOrProperty("intensity");e.u_intensity=1;e.u_delta=this.properties.scale;h=s._shader;h||(h=s._shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,s.scale_pixel_shader));
|
||||
for(var m=1;m<q;m++){b>>=1;1<(d|0)&&(d>>=1);if(2>b)break;l=k[m]=GL.Texture.getTemporary(b,d,g);r[0]=1/p.width;r[1]=1/p.height;p.blit(l,h.uniforms(e));p=l}this.isOutputConnected(2)&&(b=this._average_texture,b&&b.type==a.type&&b.format==a.format||(b=this._average_texture=new GL.Texture(1,1,{type:a.type,format:a.format,filter:gl.LINEAR})),r[0]=1/p.width,r[1]=1/p.height,e.u_intensity=n,e.u_delta=1,p.blit(b,h.uniforms(e)),this.setOutputData(2,b));gl.enable(gl.BLEND);gl.blendFunc(gl.ONE,gl.ONE);e.u_intensity=
|
||||
this.getInputOrProperty("persistence");e.u_delta=0.5;for(m-=2;0<=m;m--)l=k[m],k[m]=null,r[0]=1/p.width,r[1]=1/p.height,p.blit(l,h.uniforms(e)),GL.Texture.releaseTemporary(p),p=l;gl.disable(gl.BLEND);this.isOutputConnected(1)&&(k=this._glow_texture,k&&k.width==a.width&&k.height==a.height&&k.type==f&&k.format==a.format||(k=this._glow_texture=new GL.Texture(a.width,a.height,{type:f,format:a.format,filter:gl.LINEAR})),p.blit(k),this.setOutputData(1,k));if(this.isOutputConnected(0)){k=this._final_texture;
|
||||
k&&k.width==a.width&&k.height==a.height&&k.type==f&&k.format==a.format||(k=this._final_texture=new GL.Texture(a.width,a.height,{type:f,format:a.format,filter:gl.LINEAR}));var t=this.getInputData(1),u=this.getInputOrProperty("dirt_factor");e.u_intensity=n;h=t?s._dirt_final_shader:s._final_shader;h||(h=t?s._dirt_final_shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,s.final_pixel_shader,{USE_DIRT:""}):s._final_shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,s.final_pixel_shader));k.drawTo(function(){a.bind(0);
|
||||
q.bind(1);t&&(h.setUniform("u_dirt_factor",u),h.setUniform("u_dirt_texture",t.bind(2)));h.toViewport(e)});this.setOutputData(0,k)}GL.Texture.releaseTemporary(q)}},s.cut_pixel_shader="precision highp float;\n\tvarying vec2 v_coord;\n\tuniform sampler2D u_texture;\n\tuniform float u_threshold;\n\tvoid main() {\n\t\tgl_FragColor = max( texture2D( u_texture, v_coord ) - vec4( u_threshold ), vec4(0.0) );\n\t}",s.scale_pixel_shader="precision highp float;\n\tvarying vec2 v_coord;\n\tuniform sampler2D u_texture;\n\tuniform vec2 u_texel_size;\n\tuniform float u_delta;\n\tuniform float u_intensity;\n\t\n\tvec4 sampleBox(vec2 uv) {\n\t\tvec4 o = u_texel_size.xyxy * vec2(-u_delta, u_delta).xxyy;\n\t\tvec4 s = texture2D( u_texture, uv + o.xy ) + texture2D( u_texture, uv + o.zy) + texture2D( u_texture, uv + o.xw) + texture2D( u_texture, uv + o.zw);\n\t\treturn s * 0.25;\n\t}\n\tvoid main() {\n\t\tgl_FragColor = u_intensity * sampleBox( v_coord );\n\t}",
|
||||
p.bind(1);t&&(h.setUniform("u_dirt_factor",u),h.setUniform("u_dirt_texture",t.bind(2)));h.toViewport(e)});this.setOutputData(0,k)}GL.Texture.releaseTemporary(p)}},s.cut_pixel_shader="precision highp float;\n\tvarying vec2 v_coord;\n\tuniform sampler2D u_texture;\n\tuniform float u_threshold;\n\tvoid main() {\n\t\tgl_FragColor = max( texture2D( u_texture, v_coord ) - vec4( u_threshold ), vec4(0.0) );\n\t}",s.scale_pixel_shader="precision highp float;\n\tvarying vec2 v_coord;\n\tuniform sampler2D u_texture;\n\tuniform vec2 u_texel_size;\n\tuniform float u_delta;\n\tuniform float u_intensity;\n\t\n\tvec4 sampleBox(vec2 uv) {\n\t\tvec4 o = u_texel_size.xyxy * vec2(-u_delta, u_delta).xxyy;\n\t\tvec4 s = texture2D( u_texture, uv + o.xy ) + texture2D( u_texture, uv + o.zy) + texture2D( u_texture, uv + o.xw) + texture2D( u_texture, uv + o.zw);\n\t\treturn s * 0.25;\n\t}\n\tvoid main() {\n\t\tgl_FragColor = u_intensity * sampleBox( v_coord );\n\t}",
|
||||
s.final_pixel_shader="precision highp float;\n\tvarying vec2 v_coord;\n\tuniform sampler2D u_texture;\n\tuniform sampler2D u_glow_texture;\n\t#ifdef USE_DIRT\n\t\tuniform sampler2D u_dirt_texture;\n\t#endif\n\tuniform vec2 u_texel_size;\n\tuniform float u_delta;\n\tuniform float u_intensity;\n\tuniform float u_dirt_factor;\n\t\n\tvec4 sampleBox(vec2 uv) {\n\t\tvec4 o = u_texel_size.xyxy * vec2(-u_delta, u_delta).xxyy;\n\t\tvec4 s = texture2D( u_glow_texture, uv + o.xy ) + texture2D( u_glow_texture, uv + o.zy) + texture2D( u_glow_texture, uv + o.xw) + texture2D( u_glow_texture, uv + o.zw);\n\t\treturn s * 0.25;\n\t}\n\tvoid main() {\n\t\tvec4 glow = sampleBox( v_coord );\n\t\t#ifdef USE_DIRT\n\t\t\tglow = mix( glow, glow * texture2D( u_dirt_texture, v_coord ), u_dirt_factor );\n\t\t#endif\n\t\tgl_FragColor = texture2D( u_texture, v_coord ) + u_intensity * glow;\n\t}",
|
||||
F.registerNodeType("texture/glow",s),I.title="Kuwahara Filter",I.desc="Filters a texture giving an artistic oil canvas painting",I.max_radius=10,I._shaders=[],I.prototype.onExecute=function(){var a=this.getInputData(0);if(a&&this.isOutputConnected(0)){var b=this._temp_texture;b&&b.width==a.width&&b.height==a.height&&b.type==a.type||(this._temp_texture=new GL.Texture(a.width,a.height,{type:a.type,format:gl.RGBA,filter:gl.LINEAR}));b=this.properties.radius;b=Math.min(Math.floor(b),I.max_radius);if(0==
|
||||
b)this.setOutputData(0,a);else{var d=this.properties.intensity,c=F.camera_aspect;c||void 0===window.gl||(c=gl.canvas.height/gl.canvas.width);c||(c=1);c=this.properties.preserve_aspect?c:1;I._shaders[b]||(I._shaders[b]=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,I.pixel_shader,{RADIUS:b.toFixed(0)}));var g=I._shaders[b],f=GL.Mesh.getScreenQuad();a.bind(0);this._temp_texture.drawTo(function(){g.uniforms({u_texture:0,u_intensity:d,u_resolution:[a.width,a.height],u_iResolution:[1/a.width,1/a.height]}).draw(f)});
|
||||
@@ -542,12 +542,12 @@ F.registerNodeType("texture/exposition",N),K.title="Tone Mapping",K.desc="Applie
|
||||
b.height==a.height&&b.type==a.type||(b=this._temp_texture=new GL.Texture(a.width,a.height,{type:a.type,format:gl.RGBA,filter:gl.LINEAR}));var d=this.getInputData(1);null==d&&(d=this.properties.average_lum);var g=this._uniforms,f=null;d.constructor===Number?(this.properties.average_lum=d,g.u_average_lum=this.properties.average_lum,f=K._shader,f||(f=K._shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,K.pixel_shader))):d.constructor===GL.Texture&&(g.u_average_texture=d.bind(1),f=K._shader_texture,
|
||||
f||(f=K._shader_texture=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,K.pixel_shader,{AVG_TEXTURE:""})));g.u_lumwhite2=this.properties.lum_white*this.properties.lum_white;g.u_scale=this.properties.scale;g.u_igamma=1/this.properties.gamma;gl.disable(gl.DEPTH_TEST);b.drawTo(function(){a.bind(0);f.uniforms(g).draw(GL.Mesh.getScreenQuad())});this.setOutputData(0,this._temp_texture)}},K.pixel_shader="precision highp float;\n\t\tvarying vec2 v_coord;\n\t\tuniform sampler2D u_texture;\n\t\tuniform float u_scale;\n\t\t#ifdef AVG_TEXTURE\n\t\t\tuniform sampler2D u_average_texture;\n\t\t#else\n\t\t\tuniform float u_average_lum;\n\t\t#endif\n\t\tuniform float u_lumwhite2;\n\t\tuniform float u_igamma;\n\t\tvec3 RGB2xyY (vec3 rgb)\n\t\t{\n\t\t\t const mat3 RGB2XYZ = mat3(0.4124, 0.3576, 0.1805,\n\t\t\t\t\t\t\t\t\t 0.2126, 0.7152, 0.0722,\n\t\t\t\t\t\t\t\t\t 0.0193, 0.1192, 0.9505);\n\t\t\tvec3 XYZ = RGB2XYZ * rgb;\n\t\t\t\n\t\t\tfloat f = (XYZ.x + XYZ.y + XYZ.z);\n\t\t\treturn vec3(XYZ.x / f,\n\t\t\t\t\t\tXYZ.y / f,\n\t\t\t\t\t\tXYZ.y);\n\t\t}\n\t\t\n\t\tvoid main() {\n\t\t\tvec4 color = texture2D( u_texture, v_coord );\n\t\t\tvec3 rgb = color.xyz;\n\t\t\tfloat average_lum = 0.0;\n\t\t\t#ifdef AVG_TEXTURE\n\t\t\t\tvec3 pixel = texture2D(u_average_texture,vec2(0.5)).xyz;\n\t\t\t\taverage_lum = (pixel.x + pixel.y + pixel.z) / 3.0;\n\t\t\t#else\n\t\t\t\taverage_lum = u_average_lum;\n\t\t\t#endif\n\t\t\t//Ld - this part of the code is the same for both versions\n\t\t\tfloat lum = dot(rgb, vec3(0.2126, 0.7152, 0.0722));\n\t\t\tfloat L = (u_scale / average_lum) * lum;\n\t\t\tfloat Ld = (L * (1.0 + L / u_lumwhite2)) / (1.0 + L);\n\t\t\t//first\n\t\t\t//vec3 xyY = RGB2xyY(rgb);\n\t\t\t//xyY.z *= Ld;\n\t\t\t//rgb = xyYtoRGB(xyY);\n\t\t\t//second\n\t\t\trgb = (rgb / lum) * Ld;\n\t\t\trgb = max(rgb,vec3(0.001));\n\t\t\trgb = pow( rgb, vec3( u_igamma ) );\n\t\t\tgl_FragColor = vec4( rgb, color.a );\n\t\t}",
|
||||
F.registerNodeType("texture/tonemapping",K),M.title="Perlin",M.desc="Generates a perlin noise texture",M.widgets_info={precision:{widget:"combo",values:c.MODE_VALUES},width:{type:"Number",precision:0,step:1},height:{type:"Number",precision:0,step:1},octaves:{type:"Number",precision:0,step:1,min:1,max:50}},M.prototype.onGetInputs=function(){return[["seed","Number"],["persistence","Number"],["octaves","Number"],["scale","Number"],["amplitude","Number"],["offset","vec2"]]},M.prototype.onExecute=function(){if(this.isOutputConnected(0)){var a=
|
||||
this.properties.width|0,b=this.properties.height|0;0==a&&(a=gl.viewport_data[2]);0==b&&(b=gl.viewport_data[3]);var d=c.getTextureType(this.properties.precision),g=this._texture;g&&g.width==a&&g.height==b&&g.type==d||(g=this._texture=new GL.Texture(a,b,{type:d,format:gl.RGB,filter:gl.LINEAR}));var f=this.getInputOrProperty("persistence"),e=this.getInputOrProperty("octaves"),k=this.getInputOrProperty("offset"),h=this.getInputOrProperty("scale"),l=this.getInputOrProperty("amplitude"),q=this.getInputOrProperty("seed"),
|
||||
d=""+a+b+d+f+e+h+q+k[0]+k[1]+l;if(d!=this._key){this._key=d;var p=this._uniforms;p.u_persistence=f;p.u_octaves=e;p.u_offset.set(k);p.u_scale=h;p.u_amplitude=l;p.u_seed=128*q;p.u_viewport[0]=a;p.u_viewport[1]=b;var r=M._shader;r||(r=M._shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,M.pixel_shader));gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);g.drawTo(function(){r.uniforms(p).draw(GL.Mesh.getScreenQuad())})}this.setOutputData(0,g)}},M.pixel_shader="precision highp float;\n\t\tvarying vec2 v_coord;\n\t\tuniform vec2 u_offset;\n\t\tuniform float u_scale;\n\t\tuniform float u_persistence;\n\t\tuniform int u_octaves;\n\t\tuniform float u_amplitude;\n\t\tuniform vec2 u_viewport;\n\t\tuniform float u_seed;\n\t\t#define M_PI 3.14159265358979323846\n\t\t\n\t\tfloat rand(vec2 c){\treturn fract(sin(dot(c.xy ,vec2( 12.9898 + u_seed,78.233 + u_seed))) * 43758.5453); }\n\t\t\n\t\tfloat noise(vec2 p, float freq ){\n\t\t\tfloat unit = u_viewport.x/freq;\n\t\t\tvec2 ij = floor(p/unit);\n\t\t\tvec2 xy = mod(p,unit)/unit;\n\t\t\t//xy = 3.*xy*xy-2.*xy*xy*xy;\n\t\t\txy = .5*(1.-cos(M_PI*xy));\n\t\t\tfloat a = rand((ij+vec2(0.,0.)));\n\t\t\tfloat b = rand((ij+vec2(1.,0.)));\n\t\t\tfloat c = rand((ij+vec2(0.,1.)));\n\t\t\tfloat d = rand((ij+vec2(1.,1.)));\n\t\t\tfloat x1 = mix(a, b, xy.x);\n\t\t\tfloat x2 = mix(c, d, xy.x);\n\t\t\treturn mix(x1, x2, xy.y);\n\t\t}\n\t\t\n\t\tfloat pNoise(vec2 p, int res){\n\t\t\tfloat persistance = u_persistence;\n\t\t\tfloat n = 0.;\n\t\t\tfloat normK = 0.;\n\t\t\tfloat f = 4.;\n\t\t\tfloat amp = 1.0;\n\t\t\tint iCount = 0;\n\t\t\tfor (int i = 0; i<50; i++){\n\t\t\t\tn+=amp*noise(p, f);\n\t\t\t\tf*=2.;\n\t\t\t\tnormK+=amp;\n\t\t\t\tamp*=persistance;\n\t\t\t\tif (iCount >= res)\n\t\t\t\t\tbreak;\n\t\t\t\tiCount++;\n\t\t\t}\n\t\t\tfloat nf = n/normK;\n\t\t\treturn nf*nf*nf*nf;\n\t\t}\n\t\tvoid main() {\n\t\t\tvec2 uv = v_coord * u_scale * u_viewport + u_offset * u_scale;\n\t\t\tvec4 color = vec4( pNoise( uv, u_octaves ) * u_amplitude );\n\t\t\tgl_FragColor = color;\n\t\t}",
|
||||
this.properties.width|0,b=this.properties.height|0;0==a&&(a=gl.viewport_data[2]);0==b&&(b=gl.viewport_data[3]);var d=c.getTextureType(this.properties.precision),g=this._texture;g&&g.width==a&&g.height==b&&g.type==d||(g=this._texture=new GL.Texture(a,b,{type:d,format:gl.RGB,filter:gl.LINEAR}));var f=this.getInputOrProperty("persistence"),e=this.getInputOrProperty("octaves"),k=this.getInputOrProperty("offset"),h=this.getInputOrProperty("scale"),l=this.getInputOrProperty("amplitude"),p=this.getInputOrProperty("seed"),
|
||||
d=""+a+b+d+f+e+h+p+k[0]+k[1]+l;if(d!=this._key){this._key=d;var q=this._uniforms;q.u_persistence=f;q.u_octaves=e;q.u_offset.set(k);q.u_scale=h;q.u_amplitude=l;q.u_seed=128*p;q.u_viewport[0]=a;q.u_viewport[1]=b;var r=M._shader;r||(r=M._shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,M.pixel_shader));gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);g.drawTo(function(){r.uniforms(q).draw(GL.Mesh.getScreenQuad())})}this.setOutputData(0,g)}},M.pixel_shader="precision highp float;\n\t\tvarying vec2 v_coord;\n\t\tuniform vec2 u_offset;\n\t\tuniform float u_scale;\n\t\tuniform float u_persistence;\n\t\tuniform int u_octaves;\n\t\tuniform float u_amplitude;\n\t\tuniform vec2 u_viewport;\n\t\tuniform float u_seed;\n\t\t#define M_PI 3.14159265358979323846\n\t\t\n\t\tfloat rand(vec2 c){\treturn fract(sin(dot(c.xy ,vec2( 12.9898 + u_seed,78.233 + u_seed))) * 43758.5453); }\n\t\t\n\t\tfloat noise(vec2 p, float freq ){\n\t\t\tfloat unit = u_viewport.x/freq;\n\t\t\tvec2 ij = floor(p/unit);\n\t\t\tvec2 xy = mod(p,unit)/unit;\n\t\t\t//xy = 3.*xy*xy-2.*xy*xy*xy;\n\t\t\txy = .5*(1.-cos(M_PI*xy));\n\t\t\tfloat a = rand((ij+vec2(0.,0.)));\n\t\t\tfloat b = rand((ij+vec2(1.,0.)));\n\t\t\tfloat c = rand((ij+vec2(0.,1.)));\n\t\t\tfloat d = rand((ij+vec2(1.,1.)));\n\t\t\tfloat x1 = mix(a, b, xy.x);\n\t\t\tfloat x2 = mix(c, d, xy.x);\n\t\t\treturn mix(x1, x2, xy.y);\n\t\t}\n\t\t\n\t\tfloat pNoise(vec2 p, int res){\n\t\t\tfloat persistance = u_persistence;\n\t\t\tfloat n = 0.;\n\t\t\tfloat normK = 0.;\n\t\t\tfloat f = 4.;\n\t\t\tfloat amp = 1.0;\n\t\t\tint iCount = 0;\n\t\t\tfor (int i = 0; i<50; i++){\n\t\t\t\tn+=amp*noise(p, f);\n\t\t\t\tf*=2.;\n\t\t\t\tnormK+=amp;\n\t\t\t\tamp*=persistance;\n\t\t\t\tif (iCount >= res)\n\t\t\t\t\tbreak;\n\t\t\t\tiCount++;\n\t\t\t}\n\t\t\tfloat nf = n/normK;\n\t\t\treturn nf*nf*nf*nf;\n\t\t}\n\t\tvoid main() {\n\t\t\tvec2 uv = v_coord * u_scale * u_viewport + u_offset * u_scale;\n\t\t\tvec4 color = vec4( pNoise( uv, u_octaves ) * u_amplitude );\n\t\t\tgl_FragColor = color;\n\t\t}",
|
||||
F.registerNodeType("texture/perlin",M),L.title="Canvas2D",L.desc="Executes Canvas2D code inside a texture or the viewport.",L.help="Set width and height to 0 to match viewport size.",L.default_code="//vars: canvas,ctx,time\nctx.fillStyle='red';\nctx.fillRect(0,0,50,50);\n",L.widgets_info={precision:{widget:"combo",values:c.MODE_VALUES},code:{type:"code"},width:{type:"Number",precision:0,step:1},height:{type:"Number",precision:0,step:1}},L.prototype.onPropertyChanged=function(a,b){"code"==a&&this.compileCode(b)},
|
||||
L.prototype.compileCode=function(a){this._func=null;if(F.allow_scripts)try{this._func=new Function("canvas","ctx","time","script","v",a),this.boxcolor="#00FF00"}catch(b){this.boxcolor="#FF0000",console.error("Error parsing script"),console.error(b)}},L.prototype.onExecute=function(){var a=this._func;a&&this.isOutputConnected(0)&&this.executeDraw(a)},L.prototype.executeDraw=function(a){var b=this.properties.width||gl.canvas.width,d=this.properties.height||gl.canvas.height,g=this._temp_texture,f=c.getTextureType(this.properties.precision);
|
||||
g&&g.width==b&&g.height==d&&g.type==f||(g=this._temp_texture=new GL.Texture(b,d,{format:gl.RGBA,filter:gl.LINEAR,type:f}));var e=this.getInputData(0),k=this.properties,h=this,l=this.graph.getTime(),q=gl,p=gl.canvas;if(this.properties.use_html_canvas||!B.enableWebGLCanvas)this._canvas?(p=this._canvas,q=this._ctx):(p=this._canvas=createCanvas(b.height),q=this._ctx=p.getContext("2d")),p.width=b,p.height=d;if(q==gl)g.drawTo(function(){gl.start2D();k.clear&&(gl.clearColor(0,0,0,0),gl.clear(gl.COLOR_BUFFER_BIT));
|
||||
try{a.draw?a.draw.call(h,p,q,l,a,e):a.call(h,p,q,l,a,e),h.boxcolor="#00FF00"}catch(b){h.boxcolor="#FF0000",console.error("Error executing script"),console.error(b)}gl.finish2D()});else{k.clear&&q.clearRect(0,0,p.width,p.height);try{a.draw?a.draw.call(this,p,q,l,a,e):a.call(this,p,q,l,a,e),this.boxcolor="#00FF00"}catch(r){this.boxcolor="#FF0000",console.error("Error executing script"),console.error(r)}g.uploadImage(p)}this.setOutputData(0,g)},F.registerNodeType("texture/canvas2D",L),O.title="Matte",
|
||||
g&&g.width==b&&g.height==d&&g.type==f||(g=this._temp_texture=new GL.Texture(b,d,{format:gl.RGBA,filter:gl.LINEAR,type:f}));var e=this.getInputData(0),k=this.properties,h=this,l=this.graph.getTime(),p=gl,q=gl.canvas;if(this.properties.use_html_canvas||!B.enableWebGLCanvas)this._canvas?(q=this._canvas,p=this._ctx):(q=this._canvas=createCanvas(b.height),p=this._ctx=q.getContext("2d")),q.width=b,q.height=d;if(p==gl)g.drawTo(function(){gl.start2D();k.clear&&(gl.clearColor(0,0,0,0),gl.clear(gl.COLOR_BUFFER_BIT));
|
||||
try{a.draw?a.draw.call(h,q,p,l,a,e):a.call(h,q,p,l,a,e),h.boxcolor="#00FF00"}catch(b){h.boxcolor="#FF0000",console.error("Error executing script"),console.error(b)}gl.finish2D()});else{k.clear&&p.clearRect(0,0,q.width,q.height);try{a.draw?a.draw.call(this,q,p,l,a,e):a.call(this,q,p,l,a,e),this.boxcolor="#00FF00"}catch(r){this.boxcolor="#FF0000",console.error("Error executing script"),console.error(r)}g.uploadImage(q)}this.setOutputData(0,g)},F.registerNodeType("texture/canvas2D",L),O.title="Matte",
|
||||
O.desc="Extracts background",O.widgets_info={key_color:{widget:"color"},precision:{widget:"combo",values:c.MODE_VALUES}},O.prototype.onExecute=function(){if(this.isOutputConnected(0)){var a=this.getInputData(0);if(this.properties.precision===c.PASS_THROUGH)this.setOutputData(0,a);else if(a){this._tex=c.getTargetTexture(a,this._tex,this.properties.precision);gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);this._uniforms||(this._uniforms={u_texture:0,u_key_color:this.properties.key_color,u_threshold:1,
|
||||
u_slope:1});var b=this._uniforms,d=Mesh.getScreenQuad(),g=O._shader;g||(g=O._shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,O.pixel_shader));b.u_key_color=this.properties.key_color;b.u_threshold=this.properties.threshold;b.u_slope=this.properties.slope;this._tex.drawTo(function(){a.bind(0);g.uniforms(b).draw(d)});this.setOutputData(0,this._tex)}}},O.pixel_shader="precision highp float;\n\t\tvarying vec2 v_coord;\n\t\tuniform sampler2D u_texture;\n\t\tuniform vec3 u_key_color;\n\t\tuniform float u_threshold;\n\t\tuniform float u_slope;\n\t\t\n\t\tvoid main() {\n\t\t\tvec3 color = texture2D( u_texture, v_coord ).xyz;\n\t\t\tfloat diff = length( normalize(color) - normalize(u_key_color) );\n\t\t\tfloat edge = u_threshold * (1.0 - u_slope);\n\t\t\tfloat alpha = smoothstep( edge, u_threshold, diff);\n\t\t\tgl_FragColor = vec4( color, alpha );\n\t\t}",
|
||||
F.registerNodeType("texture/matte",O),P.title="CubemapToTexture2D",P.desc="Transforms a CUBEMAP texture into a TEXTURE2D in Polar Representation",P.prototype.onExecute=function(){if(this.isOutputConnected(0)){var a=this.getInputData(0);if(a&&a.texture_type==GL.TEXTURE_CUBE_MAP){!this._last_tex||this._last_tex.height==a.height&&this._last_tex.type==a.type||(this._last_tex=null);var b=this.getInputOrProperty("yaw");this._last_tex=GL.Texture.cubemapToTexture2D(a,a.height,this._last_tex,!0,b);this.setOutputData(0,
|
||||
@@ -558,46 +558,46 @@ this.addOutput("out","geometry");this.properties={};this.geometry={type:"triangl
|
||||
"geometry");this.addOutput("","geometry");this.properties={top_cap:!0,bottom_cap:!0,offset:[0,100,0]};this._last_geo_version=this.version=-1;this._must_update=!0}function w(){this.addInput("in","geometry");this.addOutput("out","geometry");this.properties={code:"V[1] += 0.01 * Math.sin(I + T*0.001);",execute_every_frame:!1};this.geometry=null;this.version=this.geometry_id=-1;this.must_update=!0;this.func=this.vertices=null}function u(){this.addInput("in","geometry");this.addOutput("out","geometry");
|
||||
this.properties={min_dist:0.4,max_dist:0.5,max_connections:0,probability:1};this.version=this.geometry_id=-1;this.my_version=1;this.must_update=!0}function D(){this.addInput("mesh","mesh");this.addOutput("out","geometry");this.geometry={};this.last_mesh=null}function A(){this.addInput("in","geometry");this.addOutput("mesh","mesh");this.properties={};this.version=-1;this.mesh=null}function h(){this.addInput("mesh","mesh");this.addInput("mat4","mat4");this.addInput("tex","texture");this.properties=
|
||||
{enabled:!0,primitive:GL.TRIANGLES,additive:!1,color:[1,1,1],opacity:1};this.color=vec4.create([1,1,1,1]);this.model_matrix=mat4.create();this.uniforms={u_color:this.color,u_model:this.model_matrix}}function z(){this.addInput("size","number");this.addOutput("out","mesh");this.properties={type:1,size:1,subdivisions:32};this.version=1E5*Math.random()|0;this.last_info={type:-1,size:-1,subdivisions:-1}}function y(){this.addInput("in","geometry");this.addInput("mat4","mat4");this.addInput("tex","texture");
|
||||
this.properties={enabled:!0,point_size:0.1,fixed_size:!1,additive:!0,color:[1,1,1],opacity:1};this.color=vec4.create([1,1,1,1]);this.uniforms={u_point_size:1,u_perspective:1,u_point_perspective:1,u_color:this.color};this.version=this.geometry_id=-1;this.mesh=null}var v=B.LiteGraph,G=new Float32Array(16),q=new Float32Array(16),p=new Float32Array(16),k=new Float32Array(16),a={u_view:G,u_projection:q,u_viewprojection:p,u_model:k};v.LGraphRender={onRequestCameraMatrices:null};B.LGraphPoints3D=m;m.RECTANGLE=
|
||||
this.properties={enabled:!0,point_size:0.1,fixed_size:!1,additive:!0,color:[1,1,1],opacity:1};this.color=vec4.create([1,1,1,1]);this.uniforms={u_point_size:1,u_perspective:1,u_point_perspective:1,u_color:this.color};this.version=this.geometry_id=-1;this.mesh=null}var v=B.LiteGraph,G=new Float32Array(16),p=new Float32Array(16),q=new Float32Array(16),k=new Float32Array(16),a={u_view:G,u_projection:p,u_viewprojection:q,u_model:k};v.LGraphRender={onRequestCameraMatrices:null};B.LGraphPoints3D=m;m.RECTANGLE=
|
||||
1;m.CIRCLE=2;m.CUBE=10;m.SPHERE=11;m.HEMISPHERE=12;m.INSIDE_SPHERE=13;m.OBJECT=20;m.OBJECT_UNIFORMLY=21;m.OBJECT_INSIDE=22;m.MODE_VALUES={rectangle:m.RECTANGLE,circle:m.CIRCLE,cube:m.CUBE,sphere:m.SPHERE,hemisphere:m.HEMISPHERE,inside_sphere:m.INSIDE_SPHERE,object:m.OBJECT,object_uniformly:m.OBJECT_UNIFORMLY,object_inside:m.OBJECT_INSIDE};m.widgets_info={mode:{widget:"combo",values:m.MODE_VALUES}};m.title="list of points";m.desc="returns an array of points";m.prototype.onPropertyChanged=function(a,
|
||||
d){this.must_update=!0};m.prototype.onExecute=function(){var a=this.getInputData(0);if(a!=this._old_obj||a&&a._version!=this._old_obj_version)this._old_obj=a,this.must_update=!0;a=this.getInputData(1);null==a&&(a=this.properties.radius);this._last_radius!=a&&(this._last_radius=a,this.must_update=!0);if(this.must_update||this.properties.force_update)this.must_update=!1,this.updatePoints();this.geometry.vertices=this.points;this.geometry.normals=this.normals;this.geometry._version=this.version;this.setOutputData(0,
|
||||
this.geometry)};m.prototype.updatePoints=function(){var a=this.properties.num_points|0;1>a&&(a=1);this.points&&this.points.length==3*a||(this.points=new Float32Array(3*a));this.properties.generate_normals?this.normals&&this.normals.length==this.points.length||(this.normals=new Float32Array(this.points.length)):this.normals=null;var d=this._last_radius||this.properties.radius,c=this.properties.mode,f=this.getInputData(0);this._old_obj_version=f?f._version:null;this.points=m.generatePoints(d,a,c,this.points,
|
||||
this.normals,this.properties.regular,f);this.version++};m.generatePoints=function(a,d,c,f,e,k,h){var l=3*d;f&&f.length==l||(f=new Float32Array(l));var q=new Float32Array(3),p=new Float32Array([0,1,0]);if(k)if(c==m.RECTANGLE){l=Math.floor(Math.sqrt(d));for(d=0;d<l;++d)for(c=0;c<l;++c)k=3*d+3*c*l,f[k]=(d/l-0.5)*a*2,f[k+1]=0,f[k+2]=(c/l-0.5)*a*2;f=new Float32Array(f.subarray(0,l*l*3));if(e)for(d=0;d<e.length;d+=3)e.set(p,d)}else if(c==m.SPHERE){l=Math.floor(Math.sqrt(d));for(d=0;d<l;++d)for(c=0;c<l;++c)k=
|
||||
3*d+3*c*l,polarToCartesian(q,d/l*2*Math.PI,2*(c/l-0.5)*Math.PI,a),f[k]=q[0],f[k+1]=q[1],f[k+2]=q[2];f=new Float32Array(f.subarray(0,l*l*3));e&&m.generateSphericalNormals(f,e)}else{if(c==m.CIRCLE){for(d=0;d<l;d+=3)q=d/l*Math.PI*2,f[d]=Math.cos(q)*a,f[d+1]=0,f[d+2]=Math.sin(q)*a;if(e)for(d=0;d<e.length;d+=3)e.set(p,d)}}else if(c==m.RECTANGLE){for(d=0;d<l;d+=3)f[d]=(Math.random()-0.5)*a*2,f[d+1]=0,f[d+2]=(Math.random()-0.5)*a*2;if(e)for(d=0;d<e.length;d+=3)e.set(p,d)}else if(c==m.CUBE){for(d=0;d<l;d+=
|
||||
3)f[d]=(Math.random()-0.5)*a*2,f[d+1]=(Math.random()-0.5)*a*2,f[d+2]=(Math.random()-0.5)*a*2;if(e)for(d=0;d<e.length;d+=3)e.set(p,d)}else c==m.SPHERE?(m.generateSphere(f,l,a),e&&m.generateSphericalNormals(f,e)):c==m.HEMISPHERE?(m.generateHemisphere(f,l,a),e&&m.generateSphericalNormals(f,e)):c==m.CIRCLE?(m.generateInsideCircle(f,l,a),e&&m.generateSphericalNormals(f,e)):c==m.INSIDE_SPHERE?(m.generateInsideSphere(f,l,a),e&&m.generateSphericalNormals(f,e)):c==m.OBJECT?m.generateFromObject(f,e,l,h,!1):
|
||||
c==m.OBJECT_UNIFORMLY?m.generateFromObject(f,e,l,h,!0):c==m.OBJECT_INSIDE?m.generateFromInsideObject(f,l,h):console.warn("wrong mode in LGraphPoints3D");return f};m.generateSphericalNormals=function(a,d){for(var c=new Float32Array(3),f=0;f<d.length;f+=3)c[0]=a[f],c[1]=a[f+1],c[2]=a[f+2],vec3.normalize(c,c),d.set(c,f)};m.generateSphere=function(a,d,c){for(var f=0;f<d;f+=3){var e=Math.random(),k=Math.random(),h=2*Math.cos(2*Math.PI*e)*Math.sqrt(k*(1-k)),l=1-2*k,e=2*Math.sin(2*Math.PI*e)*Math.sqrt(k*
|
||||
(1-k));a[f]=h*c;a[f+1]=l*c;a[f+2]=e*c}};m.generateHemisphere=function(a,d,c){for(var f=0;f<d;f+=3){var e=Math.random(),k=Math.random(),h=Math.cos(2*Math.PI*e)*Math.sqrt(1-k*k),l=k,e=Math.sin(2*Math.PI*e)*Math.sqrt(1-k*k);a[f]=h*c;a[f+1]=l*c;a[f+2]=e*c}};m.generateInsideCircle=function(a,d,c){for(var f=0;f<d;f+=3){var e=Math.random(),k=Math.random(),h=Math.cos(2*Math.PI*e)*Math.sqrt(1-k*k),e=Math.sin(2*Math.PI*e)*Math.sqrt(1-k*k);a[f]=h*c;a[f+1]=0;a[f+2]=e*c}};m.generateInsideSphere=function(a,d,c){for(var f=
|
||||
0;f<d;f+=3){var e=Math.random(),k=Math.random(),h=2*e*Math.PI,l=Math.acos(2*k-1),k=Math.cbrt(Math.random())*c,e=Math.sin(h),h=Math.cos(h),q=Math.sin(l),l=Math.cos(l);a[f]=k*q*h;a[f+1]=k*q*e;a[f+2]=k*l}};m.generateFromObject=function(a,d,c,f,e){if(f){var k=null,h=null,l=null,q=null;f.constructor===GL.Mesh&&(k=f.vertexBuffers.vertices.data,h=f.vertexBuffers.normals?f.vertexBuffers.normals.data:null,(l=f.indexBuffers.indices?f.indexBuffers.indices.data:null)||(l=f.indexBuffers.triangles?f.indexBuffers.triangles.data:
|
||||
null));if(!k)return null;f=l?l.length/3:k.length/9;var p=0;if(e){for(var q=new Float32Array(f),m=0;m<f;++m){l?(u=3*l[3*m],v=3*l[3*m+1],w=3*l[3*m+2]):(u=9*m,v=9*m+3,w=9*m+6);var u=k.subarray(u,u+3),v=k.subarray(v,v+3),x=k.subarray(w,w+3),w=vec3.distance(u,v),v=vec3.distance(v,x),u=vec3.distance(x,u),x=(w+v+u)/2,p=p+Math.sqrt(x*(x-w)*(x-v)*(x-u));q[m]=p}for(m=0;m<f;++m)q[m]/=p}for(m=0;m<c;m+=3){var w=Math.random(),p=e?n(q,w):Math.floor(w*f),u=0,v=0,w=0;l?(u=3*l[3*p],v=3*l[3*p+1],w=3*l[3*p+2]):(u=9*
|
||||
p,v=9*p+3,w=9*p+6);var x=Math.random(),p=Math.random(),y=Math.sqrt(x),x=1-y,C=y*(1-p),p=p*y;a[m]=x*k[u]+C*k[v]+p*k[w];a[m+1]=x*k[u+1]+C*k[v+1]+p*k[w+1];a[m+2]=x*k[u+2]+C*k[v+2]+p*k[w+2];d&&h&&(d[m]=x*h[u]+C*h[v]+p*h[w],d[m+1]=x*h[u+1]+C*h[v+1]+p*h[w+1],d[m+2]=x*h[u+2]+C*h[v+2]+p*h[w+2],w=d.subarray(m,m+3),vec3.normalize(w,w))}}};m.generateFromInsideObject=function(a,d,c){if(c&&c.constructor===GL.Mesh){var f=c.getBoundingBox();c.octree||(c.octree=new GL.Octree(c));c=c.octree;for(var e=vec3.create(),
|
||||
k=vec3.fromValues(1,0,0),h=vec3.create(),l=0,q=0;l<d&&q<10*a.length;){var q=q+1,p=vec3.random(h);p[0]=(2*p[0]-1)*f[3]+f[0];p[1]=(2*p[1]-1)*f[4]+f[1];p[2]=(2*p[2]-1)*f[5]+f[2];e.set(p);var n=c.testRay(e,k,0,1E4,!0,GL.Octree.ALL);n&&0!=n.length%2&&(a.set(p,l),l+=3)}}};v.registerNodeType("geometry/points3D",m);l.NORMAL=0;l.VERTICAL=1;l.SPHERICAL=2;l.RANDOM=3;l.RANDOM_VERTICAL=4;l.modes={normal:0,vertical:1,spherical:2,random:3,random_vertical:4};l.widgets_info={mode:{widget:"combo",values:l.modes}};
|
||||
this.normals,this.properties.regular,f);this.version++};m.generatePoints=function(a,d,c,f,e,k,h){var p=3*d;f&&f.length==p||(f=new Float32Array(p));var l=new Float32Array(3),q=new Float32Array([0,1,0]);if(k)if(c==m.RECTANGLE){p=Math.floor(Math.sqrt(d));for(d=0;d<p;++d)for(c=0;c<p;++c)k=3*d+3*c*p,f[k]=(d/p-0.5)*a*2,f[k+1]=0,f[k+2]=(c/p-0.5)*a*2;f=new Float32Array(f.subarray(0,p*p*3));if(e)for(d=0;d<e.length;d+=3)e.set(q,d)}else if(c==m.SPHERE){p=Math.floor(Math.sqrt(d));for(d=0;d<p;++d)for(c=0;c<p;++c)k=
|
||||
3*d+3*c*p,polarToCartesian(l,d/p*2*Math.PI,2*(c/p-0.5)*Math.PI,a),f[k]=l[0],f[k+1]=l[1],f[k+2]=l[2];f=new Float32Array(f.subarray(0,p*p*3));e&&m.generateSphericalNormals(f,e)}else{if(c==m.CIRCLE){for(d=0;d<p;d+=3)l=d/p*Math.PI*2,f[d]=Math.cos(l)*a,f[d+1]=0,f[d+2]=Math.sin(l)*a;if(e)for(d=0;d<e.length;d+=3)e.set(q,d)}}else if(c==m.RECTANGLE){for(d=0;d<p;d+=3)f[d]=(Math.random()-0.5)*a*2,f[d+1]=0,f[d+2]=(Math.random()-0.5)*a*2;if(e)for(d=0;d<e.length;d+=3)e.set(q,d)}else if(c==m.CUBE){for(d=0;d<p;d+=
|
||||
3)f[d]=(Math.random()-0.5)*a*2,f[d+1]=(Math.random()-0.5)*a*2,f[d+2]=(Math.random()-0.5)*a*2;if(e)for(d=0;d<e.length;d+=3)e.set(q,d)}else c==m.SPHERE?(m.generateSphere(f,p,a),e&&m.generateSphericalNormals(f,e)):c==m.HEMISPHERE?(m.generateHemisphere(f,p,a),e&&m.generateSphericalNormals(f,e)):c==m.CIRCLE?(m.generateInsideCircle(f,p,a),e&&m.generateSphericalNormals(f,e)):c==m.INSIDE_SPHERE?(m.generateInsideSphere(f,p,a),e&&m.generateSphericalNormals(f,e)):c==m.OBJECT?m.generateFromObject(f,e,p,h,!1):
|
||||
c==m.OBJECT_UNIFORMLY?m.generateFromObject(f,e,p,h,!0):c==m.OBJECT_INSIDE?m.generateFromInsideObject(f,p,h):console.warn("wrong mode in LGraphPoints3D");return f};m.generateSphericalNormals=function(a,d){for(var c=new Float32Array(3),f=0;f<d.length;f+=3)c[0]=a[f],c[1]=a[f+1],c[2]=a[f+2],vec3.normalize(c,c),d.set(c,f)};m.generateSphere=function(a,d,c){for(var f=0;f<d;f+=3){var e=Math.random(),k=Math.random(),h=2*Math.cos(2*Math.PI*e)*Math.sqrt(k*(1-k)),p=1-2*k,e=2*Math.sin(2*Math.PI*e)*Math.sqrt(k*
|
||||
(1-k));a[f]=h*c;a[f+1]=p*c;a[f+2]=e*c}};m.generateHemisphere=function(a,d,c){for(var f=0;f<d;f+=3){var e=Math.random(),k=Math.random(),h=Math.cos(2*Math.PI*e)*Math.sqrt(1-k*k),p=k,e=Math.sin(2*Math.PI*e)*Math.sqrt(1-k*k);a[f]=h*c;a[f+1]=p*c;a[f+2]=e*c}};m.generateInsideCircle=function(a,d,c){for(var f=0;f<d;f+=3){var e=Math.random(),k=Math.random(),h=Math.cos(2*Math.PI*e)*Math.sqrt(1-k*k),e=Math.sin(2*Math.PI*e)*Math.sqrt(1-k*k);a[f]=h*c;a[f+1]=0;a[f+2]=e*c}};m.generateInsideSphere=function(a,d,c){for(var f=
|
||||
0;f<d;f+=3){var e=Math.random(),k=Math.random(),h=2*e*Math.PI,p=Math.acos(2*k-1),k=Math.cbrt(Math.random())*c,e=Math.sin(h),h=Math.cos(h),l=Math.sin(p),p=Math.cos(p);a[f]=k*l*h;a[f+1]=k*l*e;a[f+2]=k*p}};m.generateFromObject=function(a,d,c,f,e){if(f){var k=null,h=null,p=null,l=null;f.constructor===GL.Mesh&&(k=f.vertexBuffers.vertices.data,h=f.vertexBuffers.normals?f.vertexBuffers.normals.data:null,(p=f.indexBuffers.indices?f.indexBuffers.indices.data:null)||(p=f.indexBuffers.triangles?f.indexBuffers.triangles.data:
|
||||
null));if(!k)return null;f=p?p.length/3:k.length/9;var q=0;if(e){for(var l=new Float32Array(f),m=0;m<f;++m){p?(u=3*p[3*m],v=3*p[3*m+1],w=3*p[3*m+2]):(u=9*m,v=9*m+3,w=9*m+6);var u=k.subarray(u,u+3),v=k.subarray(v,v+3),x=k.subarray(w,w+3),w=vec3.distance(u,v),v=vec3.distance(v,x),u=vec3.distance(x,u),x=(w+v+u)/2,q=q+Math.sqrt(x*(x-w)*(x-v)*(x-u));l[m]=q}for(m=0;m<f;++m)l[m]/=q}for(m=0;m<c;m+=3){var w=Math.random(),q=e?n(l,w):Math.floor(w*f),u=0,v=0,w=0;p?(u=3*p[3*q],v=3*p[3*q+1],w=3*p[3*q+2]):(u=9*
|
||||
q,v=9*q+3,w=9*q+6);var x=Math.random(),q=Math.random(),y=Math.sqrt(x),x=1-y,C=y*(1-q),q=q*y;a[m]=x*k[u]+C*k[v]+q*k[w];a[m+1]=x*k[u+1]+C*k[v+1]+q*k[w+1];a[m+2]=x*k[u+2]+C*k[v+2]+q*k[w+2];d&&h&&(d[m]=x*h[u]+C*h[v]+q*h[w],d[m+1]=x*h[u+1]+C*h[v+1]+q*h[w+1],d[m+2]=x*h[u+2]+C*h[v+2]+q*h[w+2],w=d.subarray(m,m+3),vec3.normalize(w,w))}}};m.generateFromInsideObject=function(a,d,c){if(c&&c.constructor===GL.Mesh){var f=c.getBoundingBox();c.octree||(c.octree=new GL.Octree(c));c=c.octree;for(var e=vec3.create(),
|
||||
k=vec3.fromValues(1,0,0),h=vec3.create(),p=0,l=0;p<d&&l<10*a.length;){var l=l+1,q=vec3.random(h);q[0]=(2*q[0]-1)*f[3]+f[0];q[1]=(2*q[1]-1)*f[4]+f[1];q[2]=(2*q[2]-1)*f[5]+f[2];e.set(q);var n=c.testRay(e,k,0,1E4,!0,GL.Octree.ALL);n&&0!=n.length%2&&(a.set(q,p),p+=3)}}};v.registerNodeType("geometry/points3D",m);l.NORMAL=0;l.VERTICAL=1;l.SPHERICAL=2;l.RANDOM=3;l.RANDOM_VERTICAL=4;l.modes={normal:0,vertical:1,spherical:2,random:3,random_vertical:4};l.widgets_info={mode:{widget:"combo",values:l.modes}};
|
||||
l.title="points to inst";l.prototype.onExecute=function(){var a=this.getInputData(0);if(!a)this.setOutputData(0,null);else if(this.isOutputConnected(0)){if((a._version!=this._version||a._id!=this._geometry_id)&&this.properties.autoupdate||this.first_time)this.first_time=!1,this.updateInstances(a);this.setOutputData(0,this.matrices)}};l.prototype.updateInstances=function(a){var d=a.vertices;if(!d)return null;var c=a.normals,f=this.matrices,e=d.length/3;f.length!=e&&(f.length=e);var e=mat4.create(),
|
||||
k=vec3.create();vec3.create();var h=vec3.fromValues(0,1,0),p=vec3.fromValues(0,0,-1);vec3.fromValues(1,0,0);for(var q=quat.create(),n=vec3.create(),m=vec3.create(),u=vec3.create(),v=0;v<d.length;v+=3){var x=v/3,w=f[x];w||(w=f[x]=mat4.create());w.set(e);x=d.subarray(v,v+3);switch(this.properties.mode){case l.NORMAL:mat4.setTranslation(w,x);if(c){var y=c.subarray(v,v+3);u.set(y);vec3.normalize(u,u);vec3.cross(m,p,u);vec3.normalize(m,m);vec3.cross(n,m,u);vec3.normalize(n,n);w.set(m,0);w.set(u,4);w.set(n,
|
||||
8);mat4.setTranslation(w,x)}break;case l.VERTICAL:mat4.setTranslation(w,x);break;case l.SPHERICAL:n.set(x);vec3.normalize(n,n);vec3.cross(m,h,n);vec3.normalize(m,m);vec3.cross(u,n,m);vec3.normalize(u,u);w.set(m,0);w.set(u,4);w.set(n,8);mat4.setTranslation(w,x);break;case l.RANDOM:k[0]=2*Math.random()-1;k[1]=2*Math.random()-1;k[2]=2*Math.random()-1;vec3.normalize(k,k);quat.setAxisAngle(q,k,2*Math.random()*Math.PI);mat4.fromQuat(w,q);mat4.setTranslation(w,x);break;case l.RANDOM_VERTICAL:quat.setAxisAngle(q,
|
||||
h,2*Math.random()*Math.PI),mat4.fromQuat(w,q),mat4.setTranslation(w,x)}}this._version=a._version;this._geometry_id=a._id};v.registerNodeType("geometry/points_to_instances",l);x.title="Transform";x.prototype.onExecute=function(){var a=this.getInputData(0),d=this.getInputData(1);if(a)if(a.constructor===Array){if(0!=a.length&&(this.outputs[0].type="[mat4]",this.isOutputConnected(0)))if(d){this._output||(this._output=[]);this._output.length!=a.length&&(this._output.length=a.length);for(var c=0;c<a.length;++c){var f=
|
||||
this._output[c];f||(f=this._output[c]=mat4.create());mat4.multiply(f,a[c],d)}this.setOutputData(0,this._output)}else this.setOutputData(0,a)}else if(a.vertices&&a.vertices.length&&(this.outputs[0].type="geometry",this.isOutputConnected(0)))if(d){c=typedArrayToArray(d).join(",");if(this.must_update||a._id!=this._last_geometry_id||a._version!=this._last_version||c!=this._last_key)this.updateGeometry(a,d),this._last_key=c,this._last_version=a._version,this._last_geometry_id=a._id,this.must_update=!1;
|
||||
this.setOutputData(0,this.geometry)}else this.setOutputData(0,a)};x.prototype.updateGeometry=function(a,d){var c=a.vertices,f=this.geometry.vertices;f&&f.length==c.length||(f=this.geometry.vertices=new Float32Array(c.length));for(var e=vec3.create(),k=0,h=f.length;k<h;k+=3)e[0]=c[k],e[1]=c[k+1],e[2]=c[k+2],mat4.multiplyVec3(e,d,e),f[k]=e[0],f[k+1]=e[1],f[k+2]=e[2];if(a.normals){this.geometry.normals&&this.geometry.normals.length==a.normals.length||(this.geometry.normals=new Float32Array(a.normals.length));
|
||||
c=this.geometry.normals;(f=mat4.invert(mat4.create(),d))&&mat4.transpose(f,f);for(var l=a.normals,k=0,h=c.length;k<h;k+=3)e[0]=l[k],e[1]=l[k+1],e[2]=l[k+2],mat4.multiplyVec3(e,f,e),c[k]=e[0],c[k+1]=e[1],c[k+2]=e[2]}this.geometry.type=a.type;this.geometry._version++};v.registerNodeType("geometry/transform",x);e.title="Polygon";e.prototype.onExecute=function(){if(this.isOutputConnected(0)){var a=this.getInputOrProperty("sides"),d=this.getInputOrProperty("radius"),a=Math.max(3,a)|0;this.last_info.sides==
|
||||
c=this.geometry.normals;(f=mat4.invert(mat4.create(),d))&&mat4.transpose(f,f);for(var p=a.normals,k=0,h=c.length;k<h;k+=3)e[0]=p[k],e[1]=p[k+1],e[2]=p[k+2],mat4.multiplyVec3(e,f,e),c[k]=e[0],c[k+1]=e[1],c[k+2]=e[2]}this.geometry.type=a.type;this.geometry._version++};v.registerNodeType("geometry/transform",x);e.title="Polygon";e.prototype.onExecute=function(){if(this.isOutputConnected(0)){var a=this.getInputOrProperty("sides"),d=this.getInputOrProperty("radius"),a=Math.max(3,a)|0;this.last_info.sides==
|
||||
a&&this.last_info.radius==d||this.updateGeometry(a,d);this.setOutputData(0,this.geometry)}};e.prototype.updateGeometry=function(a,d){var c=this.geometry.vertices;c&&c.length==3*a||(c=this.geometry.vertices=new Float32Array(3*a));var f=2*Math.PI/a;this.properties.uvs&&(uvs=this.geometry.coords=new Float32Array(3*a));for(var e=0;e<a;++e){var k=f*-e,h=Math.cos(k)*d,k=Math.sin(k)*d;c[3*e]=h;c[3*e+1]=0;c[3*e+2]=k}this.geometry._id=++this.geometry_id;this.geometry._version=++this.version;this.last_info.sides=
|
||||
a;this.last_info.radius=d};v.registerNodeType("geometry/polygon",e);C.title="extrude";C.prototype.onPropertyChanged=function(a,d){this._must_update=!0};C.prototype.onExecute=function(){var a=this.getInputData(0);if(a&&this.isOutputConnected(0)){if(a.version!=this._last_geo_version||this._must_update){if(this._geo=this.extrudeGeometry(a,this._geo))this._geo.version=this.version++;this._must_update=!1}this.setOutputData(0,this._geo)}};C.prototype.extrudeGeometry=function(a){var d=a.vertices,g=d.length/
|
||||
3,f=vec3.create(),e=vec3.create(),k=vec3.create(),h=vec3.create(),l=new Float32Array(this.properties.offset);if("line_loop"==a.type)for(var p=new Float32Array(18*g),g=a=0,q=d.length;g<q;g+=3)f[0]=d[g],f[1]=d[g+1],f[2]=d[g+2],g+3<q?(e[0]=d[g+3],e[1]=d[g+4],e[2]=d[g+5]):(e[0]=d[0],e[1]=d[1],e[2]=d[2]),vec3.add(k,f,l),vec3.add(h,e,l),p.set(f,a),a+=3,p.set(e,a),a+=3,p.set(k,a),a+=3,p.set(e,a),a+=3,p.set(h,a),a+=3,p.set(k,a),a+=3;return{_id:c(),type:"triangles",vertices:p}};v.registerNodeType("geometry/extrude",
|
||||
3,f=vec3.create(),e=vec3.create(),k=vec3.create(),h=vec3.create(),p=new Float32Array(this.properties.offset);if("line_loop"==a.type)for(var l=new Float32Array(18*g),g=a=0,q=d.length;g<q;g+=3)f[0]=d[g],f[1]=d[g+1],f[2]=d[g+2],g+3<q?(e[0]=d[g+3],e[1]=d[g+4],e[2]=d[g+5]):(e[0]=d[0],e[1]=d[1],e[2]=d[2]),vec3.add(k,f,p),vec3.add(h,e,p),l.set(f,a),a+=3,l.set(e,a),a+=3,l.set(k,a),a+=3,l.set(e,a),a+=3,l.set(h,a),a+=3,l.set(k,a),a+=3;return{_id:c(),type:"triangles",vertices:l}};v.registerNodeType("geometry/extrude",
|
||||
C);w.title="geoeval";w.desc="eval code";w.widgets_info={code:{widget:"code"}};w.prototype.onConfigure=function(a){this.compileCode()};w.prototype.compileCode=function(){if(this.properties.code)try{this.func=new Function("V","I","T",this.properties.code),this.boxcolor="#AFA",this.must_update=!0}catch(a){this.boxcolor="red"}};w.prototype.onPropertyChanged=function(a,d){"code"==a&&(this.properties.code=d,this.compileCode())};w.prototype.onExecute=function(){var a=this.getInputData(0);if(a)if(this.func){if(this.geometry_id!=
|
||||
a._id||this.version!=a._version||this.must_update||this.properties.execute_every_frame){this.must_update=!1;this.geometry_id=a._id;this.properties.execute_every_frame?this.version++:this.version=a._version;var d=this.func,c=getTime();this.geometry||(this.geometry={});for(var f in a)null!=a[f]&&(this.geometry[f]=a[f].constructor==Float32Array?new Float32Array(a[f]):a[f]);this.geometry._id=a._id;this.geometry._version=this.properties.execute_every_frame?this.version:a._version+1;var e=vec3.create(),
|
||||
k=this.vertices;k&&this.vertices.length==a.vertices.length?k.set(a.vertices):k=this.vertices=new Float32Array(a.vertices);for(f=0;f<k.length;f+=3)e[0]=k[f],e[1]=k[f+1],e[2]=k[f+2],d(e,f/3,c),k[f]=e[0],k[f+1]=e[1],k[f+2]=e[2];this.geometry.vertices=k}this.setOutputData(0,this.geometry)}else this.setOutputData(0,a)};v.registerNodeType("geometry/eval",w);u.title="connect points";u.desc="adds indices between near points";u.prototype.onPropertyChanged=function(a,d){this.must_update=!0};u.prototype.onExecute=
|
||||
function(){var a=this.getInputData(0);if(a){if(this.geometry_id!=a._id||this.version!=a._version||this.must_update){this.must_update=!1;this.geometry_id=a._id;this.version=a._version;this.geometry={};for(var d in a)this.geometry[d]=a[d];this.geometry._id=c();this.geometry._version=this.my_version++;var a=a.vertices,g=a.length,f=this.properties.min_dist,e=this.properties.max_dist,k=this.properties.probability,h=this.properties.max_connections,l=[];for(d=0;d<g;d+=3)for(var p=a[d],q=a[d+1],n=a[d+2],
|
||||
m=0,u=d+3;u<g;u+=3){var w=a[u],v=a[u+1],x=a[u+2],w=Math.sqrt((p-w)*(p-w)+(q-v)*(q-v)+(n-x)*(n-x));if(!(w>e||w<f||1>k&&k<Math.random())&&(l.push(d/3,u/3),m+=1,h&&m>h))break}this.geometry.indices=this.indices=new Uint32Array(l)}this.indices&&this.indices.length?(this.geometry.indices=this.indices,this.setOutputData(0,this.geometry)):this.setOutputData(0,null)}};v.registerNodeType("geometry/connectPoints",u);"undefined"!=typeof GL&&(D.title="to geometry",D.desc="converts a mesh to geometry",D.prototype.onExecute=
|
||||
function(){var a=this.getInputData(0);if(a){if(this.geometry_id!=a._id||this.version!=a._version||this.must_update){this.must_update=!1;this.geometry_id=a._id;this.version=a._version;this.geometry={};for(var d in a)this.geometry[d]=a[d];this.geometry._id=c();this.geometry._version=this.my_version++;var a=a.vertices,g=a.length,f=this.properties.min_dist,e=this.properties.max_dist,k=this.properties.probability,h=this.properties.max_connections,p=[];for(d=0;d<g;d+=3)for(var l=a[d],q=a[d+1],n=a[d+2],
|
||||
m=0,u=d+3;u<g;u+=3){var w=a[u],v=a[u+1],x=a[u+2],w=Math.sqrt((l-w)*(l-w)+(q-v)*(q-v)+(n-x)*(n-x));if(!(w>e||w<f||1>k&&k<Math.random())&&(p.push(d/3,u/3),m+=1,h&&m>h))break}this.geometry.indices=this.indices=new Uint32Array(p)}this.indices&&this.indices.length?(this.geometry.indices=this.indices,this.setOutputData(0,this.geometry)):this.setOutputData(0,null)}};v.registerNodeType("geometry/connectPoints",u);"undefined"!=typeof GL&&(D.title="to geometry",D.desc="converts a mesh to geometry",D.prototype.onExecute=
|
||||
function(){var a=this.getInputData(0);if(a){if(a!=this.last_mesh){this.last_mesh=a;for(i in a.vertexBuffers)this.geometry[i]=a.vertexBuffers[i].data;a.indexBuffers.triangles&&(this.geometry.indices=a.indexBuffers.triangles.data);this.geometry._id=c();this.geometry._version=0}this.setOutputData(0,this.geometry);this.geometry&&this.setOutputData(1,this.geometry.vertices)}},v.registerNodeType("geometry/toGeometry",D),A.title="Geo to Mesh",A.prototype.updateMesh=function(a){this.mesh||(this.mesh=new GL.Mesh);
|
||||
for(var d in a)if("_"!=d[0]){var c=a[d],f=GL.Mesh.common_buffers[d];if(f||"indices"==d){var f=f?f.spacing:3,e=this.mesh.vertexBuffers[d];e&&e.data.length==c.length?(e.data.set(c),e.upload(GL.DYNAMIC_DRAW)):e=new GL.Buffer("indices"==d?GL.ELEMENT_ARRAY_BUFFER:GL.ARRAY_BUFFER,c,f,GL.DYNAMIC_DRAW);this.mesh.addBuffer(d,e)}}if(this.mesh.vertexBuffers.normals&&this.mesh.vertexBuffers.normals.data.length!=this.mesh.vertexBuffers.vertices.data.length){c=new Float32Array([0,1,0]);f=new Float32Array(this.mesh.vertexBuffers.vertices.data.length);
|
||||
for(d=0;d<f.length;d+=3)f.set(c,d);e=new GL.Buffer(GL.ARRAY_BUFFER,f,3);this.mesh.addBuffer("normals",e)}this.mesh.updateBoundingBox();this.geometry_id=this.mesh.id=a._id;this.version=this.mesh.version=a._version;return this.mesh},A.prototype.onExecute=function(){var a=this.getInputData(0);a&&(this.version==a._version&&this.geometry_id==a._id||this.updateMesh(a),this.setOutputData(0,this.mesh))},v.registerNodeType("geometry/toMesh",A),h.title="Render Mesh",h.desc="renders a mesh flat",h.PRIMITIVE_VALUES=
|
||||
{points:GL.POINTS,lines:GL.LINES,line_loop:GL.LINE_LOOP,line_strip:GL.LINE_STRIP,triangles:GL.TRIANGLES,triangle_fan:GL.TRIANGLE_FAN,triangle_strip:GL.TRIANGLE_STRIP},h.widgets_info={primitive:{widget:"combo",values:h.PRIMITIVE_VALUES},color:{widget:"color"}},h.prototype.onExecute=function(){if(this.properties.enabled){var b=this.getInputData(0);if(b)if(v.LGraphRender.onRequestCameraMatrices){v.LGraphRender.onRequestCameraMatrices(G,q,p);var d=null;this.getInputData(2)?(d=gl.shaders.textured)||(d=
|
||||
{points:GL.POINTS,lines:GL.LINES,line_loop:GL.LINE_LOOP,line_strip:GL.LINE_STRIP,triangles:GL.TRIANGLES,triangle_fan:GL.TRIANGLE_FAN,triangle_strip:GL.TRIANGLE_STRIP},h.widgets_info={primitive:{widget:"combo",values:h.PRIMITIVE_VALUES},color:{widget:"color"}},h.prototype.onExecute=function(){if(this.properties.enabled){var b=this.getInputData(0);if(b)if(v.LGraphRender.onRequestCameraMatrices){v.LGraphRender.onRequestCameraMatrices(G,p,q);var d=null;this.getInputData(2)?(d=gl.shaders.textured)||(d=
|
||||
gl.shaders.textured=new GL.Shader(y.vertex_shader_code,y.fragment_shader_code,{USE_TEXTURE:""})):(d=gl.shaders.flat)||(d=gl.shaders.flat=new GL.Shader(y.vertex_shader_code,y.fragment_shader_code));this.color.set(this.properties.color);this.color[3]=this.properties.opacity;var c=this.model_matrix,f=this.getInputData(1);f?c.set(f):mat4.identity(c);this.uniforms.u_point_size=1;c=this.properties.primitive;d.uniforms(a);d.uniforms(this.uniforms);1<=this.properties.opacity?gl.disable(gl.BLEND):gl.enable(gl.BLEND);
|
||||
gl.enable(gl.DEPTH_TEST);this.properties.additive?(gl.blendFunc(gl.SRC_ALPHA,gl.ONE),gl.depthMask(!1)):gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);f="indices";b.indexBuffers.triangles&&(f="triangles");d.draw(b,c,f);gl.disable(gl.BLEND);gl.depthMask(!0)}else console.warn("cannot render geometry, LiteGraph.onRequestCameraMatrices is null, remember to fill this with a callback(view_matrix, projection_matrix,viewprojection_matrix) to use 3D rendering from the graph")}},v.registerNodeType("geometry/render_mesh",
|
||||
h),z.title="Primitive",z.VALID={CUBE:1,PLANE:2,CYLINDER:3,SPHERE:4,CIRCLE:5,HEMISPHERE:6,ICOSAHEDRON:7,CONE:8,QUAD:9},z.widgets_info={type:{widget:"combo",values:z.VALID}},z.prototype.onExecute=function(){if(this.isOutputConnected(0)){var a=this.getInputOrProperty("size");this.last_info.type==this.properties.type&&this.last_info.size==a&&this.last_info.subdivisions==this.properties.subdivisions||this.updateMesh(this.properties.type,a,this.properties.subdivisions);this.setOutputData(0,this._mesh)}},
|
||||
z.prototype.updateMesh=function(a,d,c){c=Math.max(0,c)|0;switch(a){case 1:this._mesh=GL.Mesh.cube({size:d,normals:!0,coords:!0});break;case 2:this._mesh=GL.Mesh.plane({size:d,xz:!0,detail:c,normals:!0,coords:!0});break;case 3:this._mesh=GL.Mesh.cylinder({size:d,subdivisions:c,normals:!0,coords:!0});break;case 4:this._mesh=GL.Mesh.sphere({size:d,"long":c,lat:c,normals:!0,coords:!0});break;case 5:this._mesh=GL.Mesh.circle({size:d,slices:c,normals:!0,coords:!0});break;case 6:this._mesh=GL.Mesh.sphere({size:d,
|
||||
"long":c,lat:c,normals:!0,coords:!0,hemi:!0});break;case 7:this._mesh=GL.Mesh.icosahedron({size:d,subdivisions:c});break;case 8:this._mesh=GL.Mesh.cone({radius:d,height:d,subdivisions:c});break;case 9:this._mesh=GL.Mesh.plane({size:d,xz:!1,detail:c,normals:!0,coords:!0})}this.last_info.type=a;this.last_info.size=d;this.last_info.subdivisions=c;this._mesh.version=this.version++},v.registerNodeType("geometry/mesh_primitive",z),y.title="renderPoints",y.desc="render points with a texture",y.widgets_info=
|
||||
{color:{widget:"color"}},y.prototype.updateMesh=function(a){this.buffer&&this.buffer.data&&this.buffer.data.length==a.vertices.length?(this.buffer.data.set(a.vertices),this.buffer.upload(GL.DYNAMIC_DRAW)):this.buffer=new GL.Buffer(GL.ARRAY_BUFFER,a.vertices,3,GL.DYNAMIC_DRAW);this.mesh||(this.mesh=new GL.Mesh);this.mesh.addBuffer("vertices",this.buffer);this.geometry_id=this.mesh.id=a._id;this.version=this.mesh.version=a._version},y.prototype.onExecute=function(){if(this.properties.enabled){var b=
|
||||
this.getInputData(0);if(b)if(this.version==b._version&&this.geometry_id==b._id||this.updateMesh(b),v.LGraphRender.onRequestCameraMatrices){v.LGraphRender.onRequestCameraMatrices(G,q,p);b=null;this.getInputData(2)?(b=gl.shaders.textured_points)||(b=gl.shaders.textured_points=new GL.Shader(y.vertex_shader_code,y.fragment_shader_code,{USE_TEXTURED_POINTS:""})):(b=gl.shaders.points)||(b=gl.shaders.points=new GL.Shader(y.vertex_shader_code,y.fragment_shader_code,{USE_POINTS:""}));this.color.set(this.properties.color);
|
||||
this.color[3]=this.properties.opacity;var d=this.getInputData(1);d?k.set(d):mat4.identity(k);this.uniforms.u_point_size=this.properties.point_size;this.uniforms.u_point_perspective=this.properties.fixed_size?0:1;this.uniforms.u_perspective=gl.viewport_data[3]*q[5];b.uniforms(a);b.uniforms(this.uniforms);1<=this.properties.opacity?gl.disable(gl.BLEND):gl.enable(gl.BLEND);gl.enable(gl.DEPTH_TEST);this.properties.additive?(gl.blendFunc(gl.SRC_ALPHA,gl.ONE),gl.depthMask(!1)):gl.blendFunc(gl.SRC_ALPHA,
|
||||
this.getInputData(0);if(b)if(this.version==b._version&&this.geometry_id==b._id||this.updateMesh(b),v.LGraphRender.onRequestCameraMatrices){v.LGraphRender.onRequestCameraMatrices(G,p,q);b=null;this.getInputData(2)?(b=gl.shaders.textured_points)||(b=gl.shaders.textured_points=new GL.Shader(y.vertex_shader_code,y.fragment_shader_code,{USE_TEXTURED_POINTS:""})):(b=gl.shaders.points)||(b=gl.shaders.points=new GL.Shader(y.vertex_shader_code,y.fragment_shader_code,{USE_POINTS:""}));this.color.set(this.properties.color);
|
||||
this.color[3]=this.properties.opacity;var d=this.getInputData(1);d?k.set(d):mat4.identity(k);this.uniforms.u_point_size=this.properties.point_size;this.uniforms.u_point_perspective=this.properties.fixed_size?0:1;this.uniforms.u_perspective=gl.viewport_data[3]*p[5];b.uniforms(a);b.uniforms(this.uniforms);1<=this.properties.opacity?gl.disable(gl.BLEND):gl.enable(gl.BLEND);gl.enable(gl.DEPTH_TEST);this.properties.additive?(gl.blendFunc(gl.SRC_ALPHA,gl.ONE),gl.depthMask(!1)):gl.blendFunc(gl.SRC_ALPHA,
|
||||
gl.ONE_MINUS_SRC_ALPHA);b.draw(this.mesh,GL.POINTS);gl.disable(gl.BLEND);gl.depthMask(!0)}else console.warn("cannot render geometry, LiteGraph.onRequestCameraMatrices is null, remember to fill this with a callback(view_matrix, projection_matrix,viewprojection_matrix) to use 3D rendering from the graph")}},v.registerNodeType("geometry/render_points",y),y.vertex_shader_code="\t\tprecision mediump float;\n\t\tattribute vec3 a_vertex;\n\t\tvarying vec3 v_vertex;\n\t\tattribute vec3 a_normal;\n\t\tvarying vec3 v_normal;\n\t\t#ifdef USE_COLOR\n\t\t\tattribute vec4 a_color;\n\t\t\tvarying vec4 v_color;\n\t\t#endif\n\t\tattribute vec2 a_coord;\n\t\tvarying vec2 v_coord;\n\t\t#ifdef USE_SIZE\n\t\t\tattribute float a_extra;\n\t\t#endif\n\t\t#ifdef USE_INSTANCING\n\t\t\tattribute mat4 u_model;\n\t\t#else\n\t\t\tuniform mat4 u_model;\n\t\t#endif\n\t\tuniform mat4 u_viewprojection;\n\t\tuniform float u_point_size;\n\t\tuniform float u_perspective;\n\t\tuniform float u_point_perspective;\n\t\tfloat computePointSize(float radius, float w)\n\t\t{\n\t\t\tif(radius < 0.0)\n\t\t\t\treturn -radius;\n\t\t\treturn u_perspective * radius / w;\n\t\t}\n\t\tvoid main() {\n\t\t\tv_coord = a_coord;\n\t\t\t#ifdef USE_COLOR\n\t\t\t\tv_color = a_color;\n\t\t\t#endif\n\t\t\tv_vertex = ( u_model * vec4( a_vertex, 1.0 )).xyz;\n\t\t\tv_normal = ( u_model * vec4( a_normal, 0.0 )).xyz;\n\t\t\tgl_Position = u_viewprojection * vec4(v_vertex,1.0);\n\t\t\tgl_PointSize = u_point_size;\n\t\t\t#ifdef USE_SIZE\n\t\t\t\tgl_PointSize = a_extra;\n\t\t\t#endif\n\t\t\tif(u_point_perspective != 0.0)\n\t\t\t\tgl_PointSize = computePointSize( gl_PointSize, gl_Position.w );\n\t\t}\t",
|
||||
y.fragment_shader_code="\t\tprecision mediump float;\n\t\tuniform vec4 u_color;\n\t\t#ifdef USE_COLOR\n\t\t\tvarying vec4 v_color;\n\t\t#endif\n\t\tvarying vec2 v_coord;\n\t\tuniform sampler2D u_texture;\n\t\tvoid main() {\n\t\t\tvec4 color = u_color;\n\t\t\t#ifdef USE_TEXTURED_POINTS\n\t\t\t\tcolor *= texture2D(u_texture, gl_PointCoord.xy);\n\t\t\t#else\n\t\t\t\t#ifdef USE_TEXTURE\n\t\t\t\t color *= texture2D(u_texture, v_coord);\n\t\t\t\t if(color.a < 0.1)\n\t\t\t\t\tdiscard;\n\t\t\t\t#endif\n\t\t\t\t#ifdef USE_POINTS\n\t\t\t\t\tfloat dist = length( gl_PointCoord.xy - vec2(0.5) );\n\t\t\t\t\tif( dist > 0.45 )\n\t\t\t\t\t\tdiscard;\n\t\t\t\t#endif\n\t\t\t#endif\n\t\t\t#ifdef USE_COLOR\n\t\t\t\tcolor *= v_color;\n\t\t\t#endif\n\t\t\tgl_FragColor = color;\n\t\t}\t")})(this);
|
||||
(function(B){var c=B.LiteGraph;if("undefined"!=typeof GL){var m=function(){this.addInput("Texture","Texture");this.addInput("Aberration","number");this.addInput("Distortion","number");this.addInput("Blur","number");this.addOutput("Texture","Texture");this.properties={aberration:1,distortion:1,blur:1,precision:LGraphTexture.DEFAULT};m._shader||(m._shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,m.pixel_shader),m._texture=new GL.Texture(3,1,{format:gl.RGB,wrap:gl.CLAMP_TO_EDGE,magFilter:gl.LINEAR,
|
||||
@@ -605,9 +605,9 @@ minFilter:gl.LINEAR,pixel_data:[255,0,0,0,255,0,0,0,255]}))};m.title="Lens";m.de
|
||||
this.properties.aberration=l);var n=this.properties.distortion;this.isInputConnected(2)&&(n=this.getInputData(2),this.properties.distortion=n);var u=this.properties.blur;this.isInputConnected(3)&&(u=this.getInputData(3),this.properties.blur=u);gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);var x=Mesh.getScreenQuad(),A=m._shader;this._tex.drawTo(function(){c.bind(0);A.uniforms({u_texture:0,u_aberration:l,u_distortion:n,u_blur:u}).draw(x)});this.setOutputData(0,this._tex)}};m.pixel_shader="precision highp float;\n\t\t\tprecision highp float;\n\t\t\tvarying vec2 v_coord;\n\t\t\tuniform sampler2D u_texture;\n\t\t\tuniform vec2 u_camera_planes;\n\t\t\tuniform float u_aberration;\n\t\t\tuniform float u_distortion;\n\t\t\tuniform float u_blur;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tvec2 coord = v_coord;\n\t\t\t\tfloat dist = distance(vec2(0.5), coord);\n\t\t\t\tvec2 dist_coord = coord - vec2(0.5);\n\t\t\t\tfloat percent = 1.0 + ((0.5 - dist) / 0.5) * u_distortion;\n\t\t\t\tdist_coord *= percent;\n\t\t\t\tcoord = dist_coord + vec2(0.5);\n\t\t\t\tvec4 color = texture2D(u_texture,coord, u_blur * dist);\n\t\t\t\tcolor.r = texture2D(u_texture,vec2(0.5) + dist_coord * (1.0+0.01*u_aberration), u_blur * dist ).r;\n\t\t\t\tcolor.b = texture2D(u_texture,vec2(0.5) + dist_coord * (1.0-0.01*u_aberration), u_blur * dist ).b;\n\t\t\t\tgl_FragColor = color;\n\t\t\t}\n\t\t\t";
|
||||
c.registerNodeType("fx/lens",m);B.LGraphFXLens=m;var n=function(){this.addInput("Texture","Texture");this.addInput("Blurred","Texture");this.addInput("Mask","Texture");this.addInput("Threshold","number");this.addOutput("Texture","Texture");this.properties={shape:"",size:10,alpha:1,threshold:1,high_precision:!1}};n.title="Bokeh";n.desc="applies an Bokeh effect";n.widgets_info={shape:{widget:"texture"}};n.prototype.onExecute=function(){var c=this.getInputData(0),l=this.getInputData(1),m=this.getInputData(2);
|
||||
if(c&&m&&this.properties.shape){l||(l=c);var u=LGraphTexture.getTexture(this.properties.shape);if(u){var x=this.properties.threshold;this.isInputConnected(3)&&(x=this.getInputData(3),this.properties.threshold=x);var A=gl.UNSIGNED_BYTE;this.properties.high_precision&&(A=gl.half_float_ext?gl.HALF_FLOAT_OES:gl.FLOAT);this._temp_texture&&this._temp_texture.type==A&&this._temp_texture.width==c.width&&this._temp_texture.height==c.height||(this._temp_texture=new GL.Texture(c.width,c.height,{type:A,format:gl.RGBA,
|
||||
filter:gl.LINEAR}));var h=n._first_shader;h||(h=n._first_shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,n._first_pixel_shader));var z=n._second_shader;z||(z=n._second_shader=new GL.Shader(n._second_vertex_shader,n._second_pixel_shader));var y=this._points_mesh;y&&y._width==c.width&&y._height==c.height&&2==y._spacing||(y=this.createPointsMesh(c.width,c.height,2));var v=Mesh.getScreenQuad(),B=this.properties.size,q=this.properties.alpha;gl.disable(gl.DEPTH_TEST);gl.disable(gl.BLEND);this._temp_texture.drawTo(function(){c.bind(0);
|
||||
l.bind(1);m.bind(2);h.uniforms({u_texture:0,u_texture_blur:1,u_mask:2,u_texsize:[c.width,c.height]}).draw(v)});this._temp_texture.drawTo(function(){gl.enable(gl.BLEND);gl.blendFunc(gl.ONE,gl.ONE);c.bind(0);u.bind(3);z.uniforms({u_texture:0,u_mask:2,u_shape:3,u_alpha:q,u_threshold:x,u_pointSize:B,u_itexsize:[1/c.width,1/c.height]}).draw(y,gl.POINTS)});this.setOutputData(0,this._temp_texture)}}else this.setOutputData(0,c)};n.prototype.createPointsMesh=function(c,l,n){for(var m=Math.round(c/n),x=Math.round(l/
|
||||
n),A=new Float32Array(m*x*2),h=-1,z=2/c*n,y=2/l*n,v=0;v<x;++v){for(var B=-1,q=0;q<m;++q){var p=v*m*2+2*q;A[p]=B;A[p+1]=h;B+=z}h+=y}this._points_mesh=GL.Mesh.load({vertices2D:A});this._points_mesh._width=c;this._points_mesh._height=l;this._points_mesh._spacing=n;return this._points_mesh};n._first_pixel_shader="precision highp float;\n\t\t\tprecision highp float;\n\t\t\tvarying vec2 v_coord;\n\t\t\tuniform sampler2D u_texture;\n\t\t\tuniform sampler2D u_texture_blur;\n\t\t\tuniform sampler2D u_mask;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\t\t\t\tvec4 blurred_color = texture2D(u_texture_blur, v_coord);\n\t\t\t\tfloat mask = texture2D(u_mask, v_coord).x;\n\t\t\t gl_FragColor = mix(color, blurred_color, mask);\n\t\t\t}\n\t\t\t";
|
||||
filter:gl.LINEAR}));var h=n._first_shader;h||(h=n._first_shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,n._first_pixel_shader));var z=n._second_shader;z||(z=n._second_shader=new GL.Shader(n._second_vertex_shader,n._second_pixel_shader));var y=this._points_mesh;y&&y._width==c.width&&y._height==c.height&&2==y._spacing||(y=this.createPointsMesh(c.width,c.height,2));var v=Mesh.getScreenQuad(),B=this.properties.size,p=this.properties.alpha;gl.disable(gl.DEPTH_TEST);gl.disable(gl.BLEND);this._temp_texture.drawTo(function(){c.bind(0);
|
||||
l.bind(1);m.bind(2);h.uniforms({u_texture:0,u_texture_blur:1,u_mask:2,u_texsize:[c.width,c.height]}).draw(v)});this._temp_texture.drawTo(function(){gl.enable(gl.BLEND);gl.blendFunc(gl.ONE,gl.ONE);c.bind(0);u.bind(3);z.uniforms({u_texture:0,u_mask:2,u_shape:3,u_alpha:p,u_threshold:x,u_pointSize:B,u_itexsize:[1/c.width,1/c.height]}).draw(y,gl.POINTS)});this.setOutputData(0,this._temp_texture)}}else this.setOutputData(0,c)};n.prototype.createPointsMesh=function(c,l,n){for(var m=Math.round(c/n),x=Math.round(l/
|
||||
n),A=new Float32Array(m*x*2),h=-1,z=2/c*n,y=2/l*n,v=0;v<x;++v){for(var B=-1,p=0;p<m;++p){var q=v*m*2+2*p;A[q]=B;A[q+1]=h;B+=z}h+=y}this._points_mesh=GL.Mesh.load({vertices2D:A});this._points_mesh._width=c;this._points_mesh._height=l;this._points_mesh._spacing=n;return this._points_mesh};n._first_pixel_shader="precision highp float;\n\t\t\tprecision highp float;\n\t\t\tvarying vec2 v_coord;\n\t\t\tuniform sampler2D u_texture;\n\t\t\tuniform sampler2D u_texture_blur;\n\t\t\tuniform sampler2D u_mask;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\t\t\t\tvec4 blurred_color = texture2D(u_texture_blur, v_coord);\n\t\t\t\tfloat mask = texture2D(u_mask, v_coord).x;\n\t\t\t gl_FragColor = mix(color, blurred_color, mask);\n\t\t\t}\n\t\t\t";
|
||||
n._second_vertex_shader="precision highp float;\n\t\t\tattribute vec2 a_vertex2D;\n\t\t\tvarying vec4 v_color;\n\t\t\tuniform sampler2D u_texture;\n\t\t\tuniform sampler2D u_mask;\n\t\t\tuniform vec2 u_itexsize;\n\t\t\tuniform float u_pointSize;\n\t\t\tuniform float u_threshold;\n\t\t\tvoid main() {\n\t\t\t\tvec2 coord = a_vertex2D * 0.5 + 0.5;\n\t\t\t\tv_color = texture2D( u_texture, coord );\n\t\t\t\tv_color += texture2D( u_texture, coord + vec2(u_itexsize.x, 0.0) );\n\t\t\t\tv_color += texture2D( u_texture, coord + vec2(0.0, u_itexsize.y));\n\t\t\t\tv_color += texture2D( u_texture, coord + u_itexsize);\n\t\t\t\tv_color *= 0.25;\n\t\t\t\tfloat mask = texture2D(u_mask, coord).x;\n\t\t\t\tfloat luminance = length(v_color) * mask;\n\t\t\t\t/*luminance /= (u_pointSize*u_pointSize)*0.01 */;\n\t\t\t\tluminance -= u_threshold;\n\t\t\t\tif(luminance < 0.0)\n\t\t\t\t{\n\t\t\t\t\tgl_Position.x = -100.0;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tgl_PointSize = u_pointSize;\n\t\t\t\tgl_Position = vec4(a_vertex2D,0.0,1.0);\n\t\t\t}\n\t\t\t";
|
||||
n._second_pixel_shader="precision highp float;\n\t\t\tvarying vec4 v_color;\n\t\t\tuniform sampler2D u_shape;\n\t\t\tuniform float u_alpha;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tvec4 color = texture2D( u_shape, gl_PointCoord );\n\t\t\t\tcolor *= v_color * u_alpha;\n\t\t\t\tgl_FragColor = color;\n\t\t\t}\n";c.registerNodeType("fx/bokeh",n);B.LGraphFXBokeh=n;var l=function(){this.addInput("Texture","Texture");this.addInput("value1","number");this.addInput("value2","number");this.addOutput("Texture",
|
||||
"Texture");this.properties={fx:"halftone",value1:1,value2:1,precision:LGraphTexture.DEFAULT}};l.title="FX";l.desc="applies an FX from a list";l.widgets_info={fx:{widget:"combo",values:["halftone","pixelate","lowpalette","noise","gamma"]},precision:{widget:"combo",values:LGraphTexture.MODE_VALUES}};l.shaders={};l.prototype.onExecute=function(){if(this.isOutputConnected(0)){var c=this.getInputData(0);if(this.properties.precision===LGraphTexture.PASS_THROUGH)this.setOutputData(0,c);else if(c){this._tex=
|
||||
@@ -663,54 +663,54 @@ h.data[0]==c.NOTEON){var k=h.note;if(!k||"undefined"==k||k.constructor!==String)
|
||||
!1;else h&&h.constructor===c&&(k=h.data[1]-(12*(this.properties.start_octave-1)+29),0<=k&&k<this.keys.length&&(h.data[0]==c.NOTEON?this.keys[k]=!0:h.data[0]==c.NOTEOFF&&(this.keys[k]=!1)),this.trigger("note",h))};y.prototype.onMouseDown=function(e,h){if(!(0>h[1])){var k=this.getKeyIndex(h);this.keys[k]=!0;this._last_key=k;var k=12*(this.properties.start_octave-1)+29+k,a=new c;a.setup([c.NOTEON,k,100]);this.trigger("note",a);return!0}};y.prototype.onMouseMove=function(e,h){if(!(0>h[1]||-1==this._last_key)){this.setDirtyCanvas(!0);
|
||||
var k=this.getKeyIndex(h);if(this._last_key==k)return!0;this.keys[this._last_key]=!1;var a=12*(this.properties.start_octave-1)+29+this._last_key,b=new c;b.setup([c.NOTEOFF,a,100]);this.trigger("note",b);this.keys[k]=!0;a=12*(this.properties.start_octave-1)+29+k;b=new c;b.setup([c.NOTEON,a,100]);this.trigger("note",b);this._last_key=k;return!0}};y.prototype.onMouseUp=function(e,h){if(!(0>h[1])){var k=this.getKeyIndex(h);this.keys[k]=!1;this._last_key=-1;var k=12*(this.properties.start_octave-1)+29+
|
||||
k,a=new c;a.setup([c.NOTEOFF,k,100]);this.trigger("note",a);return!0}};v.registerNodeType("midi/keys",y)})(this);
|
||||
(function(B){function c(){this.properties={src:"",gain:0.5,loop:!0,autoplay:!0,playbackRate:1};this._loading_audio=!1;this._audiobuffer=null;this._audionodes=[];this._last_sourcenode=null;this.addOutput("out","audio");this.addInput("gain","number");this.audionode=p.getAudioContext().createGain();this.audionode.graphnode=this;this.audionode.gain.value=this.properties.gain;this.properties.src&&this.loadSound(this.properties.src)}function m(){this.properties={gain:0.5};this._audionodes=[];this._media_stream=
|
||||
null;this.addOutput("out","audio");this.addInput("gain","number");this.audionode=p.getAudioContext().createGain();this.audionode.graphnode=this;this.audionode.gain.value=this.properties.gain}function n(){this.properties={fftSize:2048,minDecibels:-100,maxDecibels:-10,smoothingTimeConstant:0.5};this.audionode=p.getAudioContext().createAnalyser();this.audionode.graphnode=this;this.audionode.fftSize=this.properties.fftSize;this.audionode.minDecibels=this.properties.minDecibels;this.audionode.maxDecibels=
|
||||
this.properties.maxDecibels;this.audionode.smoothingTimeConstant=this.properties.smoothingTimeConstant;this.addInput("in","audio");this.addOutput("freqs","array");this.addOutput("samples","array");this._time_bin=this._freq_bin=null}function l(){this.properties={gain:1};this.audionode=p.getAudioContext().createGain();this.addInput("in","audio");this.addInput("gain","number");this.addOutput("out","audio")}function x(){this.properties={impulse_src:"",normalize:!0};this.audionode=p.getAudioContext().createConvolver();
|
||||
this.addInput("in","audio");this.addOutput("out","audio")}function e(){this.properties={threshold:-50,knee:40,ratio:12,reduction:-20,attack:0,release:0.25};this.audionode=p.getAudioContext().createDynamicsCompressor();this.addInput("in","audio");this.addOutput("out","audio")}function C(){this.properties={};this.audionode=p.getAudioContext().createWaveShaper();this.addInput("in","audio");this.addInput("shape","waveshape");this.addOutput("out","audio")}function w(){this.properties={gain1:0.5,gain2:0.5};
|
||||
this.audionode=p.getAudioContext().createGain();this.audionode1=p.getAudioContext().createGain();this.audionode1.gain.value=this.properties.gain1;this.audionode2=p.getAudioContext().createGain();this.audionode2.gain.value=this.properties.gain2;this.audionode1.connect(this.audionode);this.audionode2.connect(this.audionode);this.addInput("in1","audio");this.addInput("in1 gain","number");this.addInput("in2","audio");this.addInput("in2 gain","number");this.addOutput("out","audio")}function u(){this.properties=
|
||||
{A:0.1,D:0.1,S:0.1,R:0.1};this.audionode=p.getAudioContext().createGain();this.audionode.gain.value=0;this.addInput("in","audio");this.addInput("gate","bool");this.addOutput("out","audio");this.gate=!1}function D(){this.properties={delayTime:0.5};this.audionode=p.getAudioContext().createDelay(10);this.audionode.delayTime.value=this.properties.delayTime;this.addInput("in","audio");this.addInput("time","number");this.addOutput("out","audio")}function A(){this.properties={frequency:350,detune:0,Q:1};
|
||||
this.addProperty("type","lowpass","enum",{values:"lowpass highpass bandpass lowshelf highshelf peaking notch allpass".split(" ")});this.audionode=p.getAudioContext().createBiquadFilter();this.addInput("in","audio");this.addOutput("out","audio")}function h(){this.properties={frequency:440,detune:0,type:"sine"};this.addProperty("type","sine","enum",{values:["sine","square","sawtooth","triangle","custom"]});this.audionode=p.getAudioContext().createOscillator();this.addOutput("out","audio")}function z(){this.properties=
|
||||
{continuous:!0,mark:-1};this.addInput("data","array");this.addInput("mark","number");this.size=[300,200];this._last_buffer=null}function y(){this.properties={band:440,amplitude:1};this.addInput("freqs","array");this.addOutput("signal","number")}function v(){if(!v.default_code){var c=v.default_function.toString(),a=c.indexOf("{")+1,b=c.lastIndexOf("}");v.default_code=c.substr(a,b-a)}this.properties={code:v.default_code};c=p.getAudioContext();c.createScriptProcessor?this.audionode=c.createScriptProcessor(4096,
|
||||
1,1):(console.warn("ScriptProcessorNode deprecated"),this.audionode=c.createGain());this.processCode();v._bypass_function||(v._bypass_function=this.audionode.onaudioprocess);this.addInput("in","audio");this.addOutput("out","audio")}function G(){this.audionode=p.getAudioContext().destination;this.addInput("in","audio")}var q=B.LiteGraph,p={};B.LGAudio=p;p.getAudioContext=function(){if(!this._audio_context){window.AudioContext=window.AudioContext||window.webkitAudioContext;if(!window.AudioContext)return console.error("AudioContext not supported by browser"),
|
||||
null;this._audio_context=new AudioContext;this._audio_context.onmessage=function(c){console.log("msg",c)};this._audio_context.onended=function(c){console.log("ended",c)};this._audio_context.oncomplete=function(c){console.log("complete",c)}}return this._audio_context};p.connect=function(c,a){try{c.connect(a)}catch(b){console.warn("LGraphAudio:",b)}};p.disconnect=function(c,a){try{c.disconnect(a)}catch(b){console.warn("LGraphAudio:",b)}};p.changeAllAudiosConnections=function(c,a){if(c.inputs)for(var b=
|
||||
0;b<c.inputs.length;++b){var d=c.graph.links[c.inputs[b].link];if(d){var e=c.graph.getNodeById(d.origin_id),f=null,f=e.getAudioNodeInOutputSlot?e.getAudioNodeInOutputSlot(d.origin_slot):e.audionode,d=null,d=c.getAudioNodeInInputSlot?c.getAudioNodeInInputSlot(b):c.audionode;a?p.connect(f,d):p.disconnect(f,d)}}if(c.outputs)for(b=0;b<c.outputs.length;++b)for(var e=c.outputs[b],h=0;h<e.links.length;++h)if(d=c.graph.links[e.links[h]]){var f=c.getAudioNodeInOutputSlot?c.getAudioNodeInOutputSlot(b):c.audionode,
|
||||
l=c.graph.getNodeById(d.target_id),d=l.getAudioNodeInInputSlot?l.getAudioNodeInInputSlot(d.target_slot):l.audionode;a?p.connect(f,d):p.disconnect(f,d)}};p.onConnectionsChange=function(c,a,b,d){if(c==q.OUTPUT&&(c=null,d&&(c=this.graph.getNodeById(d.target_id)),c)){var e=null,e=this.getAudioNodeInOutputSlot?this.getAudioNodeInOutputSlot(a):this.audionode;a=null;a=c.getAudioNodeInInputSlot?c.getAudioNodeInInputSlot(d.target_slot):c.audionode;b?p.connect(e,a):p.disconnect(e,a)}};p.createAudioNodeWrapper=
|
||||
function(c){var a=c.prototype.onPropertyChanged;c.prototype.onPropertyChanged=function(b,c){a&&a.call(this,b,c);this.audionode&&void 0!==this.audionode[b]&&(void 0!==this.audionode[b].value?this.audionode[b].value=c:this.audionode[b]=c)};c.prototype.onConnectionsChange=p.onConnectionsChange};p.cached_audios={};p.loadSound=function(c,a,b){function d(a){console.log("Audio loading sample error:",a);b&&b(a)}if(p.cached_audios[c]&&-1==c.indexOf("blob:"))a&&a(p.cached_audios[c]);else{p.onProcessAudioURL&&
|
||||
(c=p.onProcessAudioURL(c));var e=new XMLHttpRequest;e.open("GET",c,!0);e.responseType="arraybuffer";var f=p.getAudioContext();e.onload=function(){console.log("AudioSource loaded");f.decodeAudioData(e.response,function(b){console.log("AudioSource decoded");p.cached_audios[c]=b;a&&a(b)},d)};e.send();return e}};c.desc="Plays an audio file";c["@src"]={widget:"resource"};c.supported_extensions=["wav","ogg","mp3"];c.prototype.onAdded=function(c){if(c.status===LGraph.STATUS_RUNNING)this.onStart()};c.prototype.onStart=
|
||||
(function(B){function c(){this.properties={src:"",gain:0.5,loop:!0,autoplay:!0,playbackRate:1};this._loading_audio=!1;this._audiobuffer=null;this._audionodes=[];this._last_sourcenode=null;this.addOutput("out","audio");this.addInput("gain","number");this.audionode=q.getAudioContext().createGain();this.audionode.graphnode=this;this.audionode.gain.value=this.properties.gain;this.properties.src&&this.loadSound(this.properties.src)}function m(){this.properties={gain:0.5};this._audionodes=[];this._media_stream=
|
||||
null;this.addOutput("out","audio");this.addInput("gain","number");this.audionode=q.getAudioContext().createGain();this.audionode.graphnode=this;this.audionode.gain.value=this.properties.gain}function n(){this.properties={fftSize:2048,minDecibels:-100,maxDecibels:-10,smoothingTimeConstant:0.5};this.audionode=q.getAudioContext().createAnalyser();this.audionode.graphnode=this;this.audionode.fftSize=this.properties.fftSize;this.audionode.minDecibels=this.properties.minDecibels;this.audionode.maxDecibels=
|
||||
this.properties.maxDecibels;this.audionode.smoothingTimeConstant=this.properties.smoothingTimeConstant;this.addInput("in","audio");this.addOutput("freqs","array");this.addOutput("samples","array");this._time_bin=this._freq_bin=null}function l(){this.properties={gain:1};this.audionode=q.getAudioContext().createGain();this.addInput("in","audio");this.addInput("gain","number");this.addOutput("out","audio")}function x(){this.properties={impulse_src:"",normalize:!0};this.audionode=q.getAudioContext().createConvolver();
|
||||
this.addInput("in","audio");this.addOutput("out","audio")}function e(){this.properties={threshold:-50,knee:40,ratio:12,reduction:-20,attack:0,release:0.25};this.audionode=q.getAudioContext().createDynamicsCompressor();this.addInput("in","audio");this.addOutput("out","audio")}function C(){this.properties={};this.audionode=q.getAudioContext().createWaveShaper();this.addInput("in","audio");this.addInput("shape","waveshape");this.addOutput("out","audio")}function w(){this.properties={gain1:0.5,gain2:0.5};
|
||||
this.audionode=q.getAudioContext().createGain();this.audionode1=q.getAudioContext().createGain();this.audionode1.gain.value=this.properties.gain1;this.audionode2=q.getAudioContext().createGain();this.audionode2.gain.value=this.properties.gain2;this.audionode1.connect(this.audionode);this.audionode2.connect(this.audionode);this.addInput("in1","audio");this.addInput("in1 gain","number");this.addInput("in2","audio");this.addInput("in2 gain","number");this.addOutput("out","audio")}function u(){this.properties=
|
||||
{A:0.1,D:0.1,S:0.1,R:0.1};this.audionode=q.getAudioContext().createGain();this.audionode.gain.value=0;this.addInput("in","audio");this.addInput("gate","bool");this.addOutput("out","audio");this.gate=!1}function D(){this.properties={delayTime:0.5};this.audionode=q.getAudioContext().createDelay(10);this.audionode.delayTime.value=this.properties.delayTime;this.addInput("in","audio");this.addInput("time","number");this.addOutput("out","audio")}function A(){this.properties={frequency:350,detune:0,Q:1};
|
||||
this.addProperty("type","lowpass","enum",{values:"lowpass highpass bandpass lowshelf highshelf peaking notch allpass".split(" ")});this.audionode=q.getAudioContext().createBiquadFilter();this.addInput("in","audio");this.addOutput("out","audio")}function h(){this.properties={frequency:440,detune:0,type:"sine"};this.addProperty("type","sine","enum",{values:["sine","square","sawtooth","triangle","custom"]});this.audionode=q.getAudioContext().createOscillator();this.addOutput("out","audio")}function z(){this.properties=
|
||||
{continuous:!0,mark:-1};this.addInput("data","array");this.addInput("mark","number");this.size=[300,200];this._last_buffer=null}function y(){this.properties={band:440,amplitude:1};this.addInput("freqs","array");this.addOutput("signal","number")}function v(){if(!v.default_code){var c=v.default_function.toString(),a=c.indexOf("{")+1,b=c.lastIndexOf("}");v.default_code=c.substr(a,b-a)}this.properties={code:v.default_code};c=q.getAudioContext();c.createScriptProcessor?this.audionode=c.createScriptProcessor(4096,
|
||||
1,1):(console.warn("ScriptProcessorNode deprecated"),this.audionode=c.createGain());this.processCode();v._bypass_function||(v._bypass_function=this.audionode.onaudioprocess);this.addInput("in","audio");this.addOutput("out","audio")}function G(){this.audionode=q.getAudioContext().destination;this.addInput("in","audio")}var p=B.LiteGraph,q={};B.LGAudio=q;q.getAudioContext=function(){if(!this._audio_context){window.AudioContext=window.AudioContext||window.webkitAudioContext;if(!window.AudioContext)return console.error("AudioContext not supported by browser"),
|
||||
null;this._audio_context=new AudioContext;this._audio_context.onmessage=function(c){console.log("msg",c)};this._audio_context.onended=function(c){console.log("ended",c)};this._audio_context.oncomplete=function(c){console.log("complete",c)}}return this._audio_context};q.connect=function(c,a){try{c.connect(a)}catch(b){console.warn("LGraphAudio:",b)}};q.disconnect=function(c,a){try{c.disconnect(a)}catch(b){console.warn("LGraphAudio:",b)}};q.changeAllAudiosConnections=function(c,a){if(c.inputs)for(var b=
|
||||
0;b<c.inputs.length;++b){var d=c.graph.links[c.inputs[b].link];if(d){var e=c.graph.getNodeById(d.origin_id),f=null,f=e.getAudioNodeInOutputSlot?e.getAudioNodeInOutputSlot(d.origin_slot):e.audionode,d=null,d=c.getAudioNodeInInputSlot?c.getAudioNodeInInputSlot(b):c.audionode;a?q.connect(f,d):q.disconnect(f,d)}}if(c.outputs)for(b=0;b<c.outputs.length;++b)for(var e=c.outputs[b],h=0;h<e.links.length;++h)if(d=c.graph.links[e.links[h]]){var f=c.getAudioNodeInOutputSlot?c.getAudioNodeInOutputSlot(b):c.audionode,
|
||||
l=c.graph.getNodeById(d.target_id),d=l.getAudioNodeInInputSlot?l.getAudioNodeInInputSlot(d.target_slot):l.audionode;a?q.connect(f,d):q.disconnect(f,d)}};q.onConnectionsChange=function(c,a,b,d){if(c==p.OUTPUT&&(c=null,d&&(c=this.graph.getNodeById(d.target_id)),c)){var e=null,e=this.getAudioNodeInOutputSlot?this.getAudioNodeInOutputSlot(a):this.audionode;a=null;a=c.getAudioNodeInInputSlot?c.getAudioNodeInInputSlot(d.target_slot):c.audionode;b?q.connect(e,a):q.disconnect(e,a)}};q.createAudioNodeWrapper=
|
||||
function(c){var a=c.prototype.onPropertyChanged;c.prototype.onPropertyChanged=function(b,c){a&&a.call(this,b,c);this.audionode&&void 0!==this.audionode[b]&&(void 0!==this.audionode[b].value?this.audionode[b].value=c:this.audionode[b]=c)};c.prototype.onConnectionsChange=q.onConnectionsChange};q.cached_audios={};q.loadSound=function(c,a,b){function d(a){console.log("Audio loading sample error:",a);b&&b(a)}if(q.cached_audios[c]&&-1==c.indexOf("blob:"))a&&a(q.cached_audios[c]);else{q.onProcessAudioURL&&
|
||||
(c=q.onProcessAudioURL(c));var e=new XMLHttpRequest;e.open("GET",c,!0);e.responseType="arraybuffer";var f=q.getAudioContext();e.onload=function(){console.log("AudioSource loaded");f.decodeAudioData(e.response,function(b){console.log("AudioSource decoded");q.cached_audios[c]=b;a&&a(b)},d)};e.send();return e}};c.desc="Plays an audio file";c["@src"]={widget:"resource"};c.supported_extensions=["wav","ogg","mp3"];c.prototype.onAdded=function(c){if(c.status===LGraph.STATUS_RUNNING)this.onStart()};c.prototype.onStart=
|
||||
function(){this._audiobuffer&&this.properties.autoplay&&this.playBuffer(this._audiobuffer)};c.prototype.onStop=function(){this.stopAllSounds()};c.prototype.onPause=function(){this.pauseAllSounds()};c.prototype.onUnpause=function(){this.unpauseAllSounds()};c.prototype.onRemoved=function(){this.stopAllSounds();this._dropped_url&&URL.revokeObjectURL(this._url)};c.prototype.stopAllSounds=function(){for(var c=0;c<this._audionodes.length;++c)this._audionodes[c].started&&(this._audionodes[c].started=!1,
|
||||
this._audionodes[c].stop());this._audionodes.length=0};c.prototype.pauseAllSounds=function(){p.getAudioContext().suspend()};c.prototype.unpauseAllSounds=function(){p.getAudioContext().resume()};c.prototype.onExecute=function(){if(this.inputs)for(var c=0;c<this.inputs.length;++c){var a=this.inputs[c];if(null!=a.link){var b=this.getInputData(c);if(void 0!==b)if("gain"==a.name)this.audionode.gain.value=b;else if("src"==a.name)this.setProperty("src",b);else if("playbackRate"==a.name)for(this.properties.playbackRate=
|
||||
this._audionodes[c].stop());this._audionodes.length=0};c.prototype.pauseAllSounds=function(){q.getAudioContext().suspend()};c.prototype.unpauseAllSounds=function(){q.getAudioContext().resume()};c.prototype.onExecute=function(){if(this.inputs)for(var c=0;c<this.inputs.length;++c){var a=this.inputs[c];if(null!=a.link){var b=this.getInputData(c);if(void 0!==b)if("gain"==a.name)this.audionode.gain.value=b;else if("src"==a.name)this.setProperty("src",b);else if("playbackRate"==a.name)for(this.properties.playbackRate=
|
||||
b,a=0;a<this._audionodes.length;++a)this._audionodes[a].playbackRate.value=b}}if(this.outputs)for(c=0;c<this.outputs.length;++c)"buffer"==this.outputs[c].name&&this._audiobuffer&&this.setOutputData(c,this._audiobuffer)};c.prototype.onAction=function(c){this._audiobuffer&&("Play"==c?this.playBuffer(this._audiobuffer):"Stop"==c&&this.stopAllSounds())};c.prototype.onPropertyChanged=function(c,a){if("src"==c)this.loadSound(a);else if("gain"==c)this.audionode.gain.value=a;else if("playbackRate"==c)for(var b=
|
||||
0;b<this._audionodes.length;++b)this._audionodes[b].playbackRate.value=a};c.prototype.playBuffer=function(c){var a=this,b=p.getAudioContext().createBufferSource();this._last_sourcenode=b;b.graphnode=this;b.buffer=c;b.loop=this.properties.loop;b.playbackRate.value=this.properties.playbackRate;this._audionodes.push(b);b.connect(this.audionode);this._audionodes.push(b);this.trigger("start");b.onended=function(){a.trigger("ended");var c=a._audionodes.indexOf(b);-1!=c&&a._audionodes.splice(c,1)};b.started||
|
||||
(b.started=!0,b.start());return b};c.prototype.loadSound=function(c){function a(a){this.boxcolor=q.NODE_DEFAULT_BOXCOLOR;b._audiobuffer=a;b._loading_audio=!1;if(b.graph&&b.graph.status===LGraph.STATUS_RUNNING)b.onStart()}var b=this;this._request&&(this._request.abort(),this._request=null);this._audiobuffer=null;this._loading_audio=!1;c&&(this._request=p.loadSound(c,a),this._loading_audio=!0,this.boxcolor="#AA4")};c.prototype.onConnectionsChange=p.onConnectionsChange;c.prototype.onGetInputs=function(){return[["playbackRate",
|
||||
"number"],["src","string"],["Play",q.ACTION],["Stop",q.ACTION]]};c.prototype.onGetOutputs=function(){return[["buffer","audiobuffer"],["start",q.EVENT],["ended",q.EVENT]]};c.prototype.onDropFile=function(c){this._dropped_url&&URL.revokeObjectURL(this._dropped_url);c=URL.createObjectURL(c);this.properties.src=c;this.loadSound(c);this._dropped_url=c};c.title="Source";c.desc="Plays audio";q.registerNodeType("audio/source",c);m.prototype.onAdded=function(c){if(c.status===LGraph.STATUS_RUNNING)this.onStart()};
|
||||
0;b<this._audionodes.length;++b)this._audionodes[b].playbackRate.value=a};c.prototype.playBuffer=function(c){var a=this,b=q.getAudioContext().createBufferSource();this._last_sourcenode=b;b.graphnode=this;b.buffer=c;b.loop=this.properties.loop;b.playbackRate.value=this.properties.playbackRate;this._audionodes.push(b);b.connect(this.audionode);this._audionodes.push(b);this.trigger("start");b.onended=function(){a.trigger("ended");var c=a._audionodes.indexOf(b);-1!=c&&a._audionodes.splice(c,1)};b.started||
|
||||
(b.started=!0,b.start());return b};c.prototype.loadSound=function(c){function a(a){this.boxcolor=p.NODE_DEFAULT_BOXCOLOR;b._audiobuffer=a;b._loading_audio=!1;if(b.graph&&b.graph.status===LGraph.STATUS_RUNNING)b.onStart()}var b=this;this._request&&(this._request.abort(),this._request=null);this._audiobuffer=null;this._loading_audio=!1;c&&(this._request=q.loadSound(c,a),this._loading_audio=!0,this.boxcolor="#AA4")};c.prototype.onConnectionsChange=q.onConnectionsChange;c.prototype.onGetInputs=function(){return[["playbackRate",
|
||||
"number"],["src","string"],["Play",p.ACTION],["Stop",p.ACTION]]};c.prototype.onGetOutputs=function(){return[["buffer","audiobuffer"],["start",p.EVENT],["ended",p.EVENT]]};c.prototype.onDropFile=function(c){this._dropped_url&&URL.revokeObjectURL(this._dropped_url);c=URL.createObjectURL(c);this.properties.src=c;this.loadSound(c);this._dropped_url=c};c.title="Source";c.desc="Plays audio";p.registerNodeType("audio/source",c);m.prototype.onAdded=function(c){if(c.status===LGraph.STATUS_RUNNING)this.onStart()};
|
||||
m.prototype.onStart=function(){null!=this._media_stream||this._waiting_confirmation||this.openStream()};m.prototype.onStop=function(){this.audionode.gain.value=0};m.prototype.onPause=function(){this.audionode.gain.value=0};m.prototype.onUnpause=function(){this.audionode.gain.value=this.properties.gain};m.prototype.onRemoved=function(){this.audionode.gain.value=0;this.audiosource_node&&(this.audiosource_node.disconnect(this.audionode),this.audiosource_node=null);if(this._media_stream){var c=this._media_stream.getTracks();
|
||||
c.length&&c[0].stop()}};m.prototype.openStream=function(){function c(b){console.log("Media rejected",b);a._media_stream=!1;a.boxcolor="red"}if(navigator.mediaDevices){this._waiting_confirmation=!0;navigator.mediaDevices.getUserMedia({audio:!0,video:!1}).then(this.streamReady.bind(this))["catch"](c);var a=this}else console.log("getUserMedia() is not supported in your browser, use chrome and enable WebRTC from about://flags")};m.prototype.streamReady=function(c){this._media_stream=c;this.audiosource_node&&
|
||||
this.audiosource_node.disconnect(this.audionode);this.audiosource_node=p.getAudioContext().createMediaStreamSource(c);this.audiosource_node.graphnode=this;this.audiosource_node.connect(this.audionode);this.boxcolor="white"};m.prototype.onExecute=function(){null!=this._media_stream||this._waiting_confirmation||this.openStream();if(this.inputs)for(var c=0;c<this.inputs.length;++c){var a=this.inputs[c];if(null!=a.link){var b=this.getInputData(c);void 0!==b&&"gain"==a.name&&(this.audionode.gain.value=
|
||||
this.properties.gain=b)}}};m.prototype.onAction=function(c){"Play"==c?this.audionode.gain.value=this.properties.gain:"Stop"==c&&(this.audionode.gain.value=0)};m.prototype.onPropertyChanged=function(c,a){"gain"==c&&(this.audionode.gain.value=a)};m.prototype.onConnectionsChange=p.onConnectionsChange;m.prototype.onGetInputs=function(){return[["playbackRate","number"],["Play",q.ACTION],["Stop",q.ACTION]]};m.title="MediaSource";m.desc="Plays microphone";q.registerNodeType("audio/media_source",m);n.prototype.onPropertyChanged=
|
||||
this.audiosource_node.disconnect(this.audionode);this.audiosource_node=q.getAudioContext().createMediaStreamSource(c);this.audiosource_node.graphnode=this;this.audiosource_node.connect(this.audionode);this.boxcolor="white"};m.prototype.onExecute=function(){null!=this._media_stream||this._waiting_confirmation||this.openStream();if(this.inputs)for(var c=0;c<this.inputs.length;++c){var a=this.inputs[c];if(null!=a.link){var b=this.getInputData(c);void 0!==b&&"gain"==a.name&&(this.audionode.gain.value=
|
||||
this.properties.gain=b)}}};m.prototype.onAction=function(c){"Play"==c?this.audionode.gain.value=this.properties.gain:"Stop"==c&&(this.audionode.gain.value=0)};m.prototype.onPropertyChanged=function(c,a){"gain"==c&&(this.audionode.gain.value=a)};m.prototype.onConnectionsChange=q.onConnectionsChange;m.prototype.onGetInputs=function(){return[["playbackRate","number"],["Play",p.ACTION],["Stop",p.ACTION]]};m.title="MediaSource";m.desc="Plays microphone";p.registerNodeType("audio/media_source",m);n.prototype.onPropertyChanged=
|
||||
function(c,a){this.audionode[c]=a};n.prototype.onExecute=function(){if(this.isOutputConnected(0)){var c=this.audionode.frequencyBinCount;this._freq_bin&&this._freq_bin.length==c||(this._freq_bin=new Uint8Array(c));this.audionode.getByteFrequencyData(this._freq_bin);this.setOutputData(0,this._freq_bin)}this.isOutputConnected(1)&&(c=this.audionode.frequencyBinCount,this._time_bin&&this._time_bin.length==c||(this._time_bin=new Uint8Array(c)),this.audionode.getByteTimeDomainData(this._time_bin),this.setOutputData(1,
|
||||
this._time_bin));for(c=1;c<this.inputs.length;++c){var a=this.inputs[c];if(null!=a.link){var b=this.getInputData(c);void 0!==b&&(this.audionode[a.name].value=b)}}};n.prototype.onGetInputs=function(){return[["minDecibels","number"],["maxDecibels","number"],["smoothingTimeConstant","number"]]};n.prototype.onGetOutputs=function(){return[["freqs","array"],["samples","array"]]};n.title="Analyser";n.desc="Audio Analyser";q.registerNodeType("audio/analyser",n);l.prototype.onExecute=function(){if(this.inputs&&
|
||||
this.inputs.length)for(var c=1;c<this.inputs.length;++c){var a=this.inputs[c],b=this.getInputData(c);void 0!==b&&(this.audionode[a.name].value=b)}};p.createAudioNodeWrapper(l);l.title="Gain";l.desc="Audio gain";q.registerNodeType("audio/gain",l);p.createAudioNodeWrapper(x);x.prototype.onRemove=function(){this._dropped_url&&URL.revokeObjectURL(this._dropped_url)};x.prototype.onPropertyChanged=function(c,a){"impulse_src"==c?this.loadImpulse(a):"normalize"==c&&(this.audionode.normalize=a)};x.prototype.onDropFile=
|
||||
function(c){this._dropped_url&&URL.revokeObjectURL(this._dropped_url);this._dropped_url=URL.createObjectURL(c);this.properties.impulse_src=this._dropped_url;this.loadImpulse(this._dropped_url)};x.prototype.loadImpulse=function(c){function a(a){b._impulse_buffer=a;b.audionode.buffer=a;console.log("Impulse signal set");b._loading_impulse=!1}var b=this;this._request&&(this._request.abort(),this._request=null);this._impulse_buffer=null;this._loading_impulse=!1;c&&(this._request=p.loadSound(c,a),this._loading_impulse=
|
||||
!0)};x.title="Convolver";x.desc="Convolves the signal (used for reverb)";q.registerNodeType("audio/convolver",x);p.createAudioNodeWrapper(e);e.prototype.onExecute=function(){if(this.inputs&&this.inputs.length)for(var c=1;c<this.inputs.length;++c){var a=this.inputs[c];if(null!=a.link){var b=this.getInputData(c);void 0!==b&&(this.audionode[a.name].value=b)}}};e.prototype.onGetInputs=function(){return[["threshold","number"],["knee","number"],["ratio","number"],["reduction","number"],["attack","number"],
|
||||
["release","number"]]};e.title="DynamicsCompressor";e.desc="Dynamics Compressor";q.registerNodeType("audio/dynamicsCompressor",e);C.prototype.onExecute=function(){if(this.inputs&&this.inputs.length){var c=this.getInputData(1);void 0!==c&&(this.audionode.curve=c)}};C.prototype.setWaveShape=function(c){this.audionode.curve=c};p.createAudioNodeWrapper(C);w.prototype.getAudioNodeInInputSlot=function(c){if(0==c)return this.audionode1;if(2==c)return this.audionode2};w.prototype.onPropertyChanged=function(c,
|
||||
a){"gain1"==c?this.audionode1.gain.value=a:"gain2"==c&&(this.audionode2.gain.value=a)};w.prototype.onExecute=function(){if(this.inputs&&this.inputs.length)for(var c=1;c<this.inputs.length;++c){var a=this.inputs[c];null!=a.link&&"audio"!=a.type&&(a=this.getInputData(c),void 0!==a&&(1==c?this.audionode1.gain.value=a:3==c&&(this.audionode2.gain.value=a)))}};p.createAudioNodeWrapper(w);w.title="Mixer";w.desc="Audio mixer";q.registerNodeType("audio/mixer",w);u.prototype.onExecute=function(){var c=p.getAudioContext().currentTime,
|
||||
this._time_bin));for(c=1;c<this.inputs.length;++c){var a=this.inputs[c];if(null!=a.link){var b=this.getInputData(c);void 0!==b&&(this.audionode[a.name].value=b)}}};n.prototype.onGetInputs=function(){return[["minDecibels","number"],["maxDecibels","number"],["smoothingTimeConstant","number"]]};n.prototype.onGetOutputs=function(){return[["freqs","array"],["samples","array"]]};n.title="Analyser";n.desc="Audio Analyser";p.registerNodeType("audio/analyser",n);l.prototype.onExecute=function(){if(this.inputs&&
|
||||
this.inputs.length)for(var c=1;c<this.inputs.length;++c){var a=this.inputs[c],b=this.getInputData(c);void 0!==b&&(this.audionode[a.name].value=b)}};q.createAudioNodeWrapper(l);l.title="Gain";l.desc="Audio gain";p.registerNodeType("audio/gain",l);q.createAudioNodeWrapper(x);x.prototype.onRemove=function(){this._dropped_url&&URL.revokeObjectURL(this._dropped_url)};x.prototype.onPropertyChanged=function(c,a){"impulse_src"==c?this.loadImpulse(a):"normalize"==c&&(this.audionode.normalize=a)};x.prototype.onDropFile=
|
||||
function(c){this._dropped_url&&URL.revokeObjectURL(this._dropped_url);this._dropped_url=URL.createObjectURL(c);this.properties.impulse_src=this._dropped_url;this.loadImpulse(this._dropped_url)};x.prototype.loadImpulse=function(c){function a(a){b._impulse_buffer=a;b.audionode.buffer=a;console.log("Impulse signal set");b._loading_impulse=!1}var b=this;this._request&&(this._request.abort(),this._request=null);this._impulse_buffer=null;this._loading_impulse=!1;c&&(this._request=q.loadSound(c,a),this._loading_impulse=
|
||||
!0)};x.title="Convolver";x.desc="Convolves the signal (used for reverb)";p.registerNodeType("audio/convolver",x);q.createAudioNodeWrapper(e);e.prototype.onExecute=function(){if(this.inputs&&this.inputs.length)for(var c=1;c<this.inputs.length;++c){var a=this.inputs[c];if(null!=a.link){var b=this.getInputData(c);void 0!==b&&(this.audionode[a.name].value=b)}}};e.prototype.onGetInputs=function(){return[["threshold","number"],["knee","number"],["ratio","number"],["reduction","number"],["attack","number"],
|
||||
["release","number"]]};e.title="DynamicsCompressor";e.desc="Dynamics Compressor";p.registerNodeType("audio/dynamicsCompressor",e);C.prototype.onExecute=function(){if(this.inputs&&this.inputs.length){var c=this.getInputData(1);void 0!==c&&(this.audionode.curve=c)}};C.prototype.setWaveShape=function(c){this.audionode.curve=c};q.createAudioNodeWrapper(C);w.prototype.getAudioNodeInInputSlot=function(c){if(0==c)return this.audionode1;if(2==c)return this.audionode2};w.prototype.onPropertyChanged=function(c,
|
||||
a){"gain1"==c?this.audionode1.gain.value=a:"gain2"==c&&(this.audionode2.gain.value=a)};w.prototype.onExecute=function(){if(this.inputs&&this.inputs.length)for(var c=1;c<this.inputs.length;++c){var a=this.inputs[c];null!=a.link&&"audio"!=a.type&&(a=this.getInputData(c),void 0!==a&&(1==c?this.audionode1.gain.value=a:3==c&&(this.audionode2.gain.value=a)))}};q.createAudioNodeWrapper(w);w.title="Mixer";w.desc="Audio mixer";p.registerNodeType("audio/mixer",w);u.prototype.onExecute=function(){var c=q.getAudioContext().currentTime,
|
||||
a=this.audionode.gain,b=this.getInputData(1),d=this.getInputOrProperty("A"),e=this.getInputOrProperty("D"),f=this.getInputOrProperty("S"),h=this.getInputOrProperty("R");!this.gate&&b?(a.cancelScheduledValues(0),a.setValueAtTime(0,c),a.linearRampToValueAtTime(1,c+d),a.linearRampToValueAtTime(f,c+d+e)):this.gate&&!b&&(a.cancelScheduledValues(0),a.setValueAtTime(a.value,c),a.linearRampToValueAtTime(0,c+h));this.gate=b};u.prototype.onGetInputs=function(){return[["A","number"],["D","number"],["S","number"],
|
||||
["R","number"]]};p.createAudioNodeWrapper(u);u.title="ADSR";u.desc="Audio envelope";q.registerNodeType("audio/adsr",u);p.createAudioNodeWrapper(D);D.prototype.onExecute=function(){var c=this.getInputData(1);void 0!==c&&(this.audionode.delayTime.value=c)};D.title="Delay";D.desc="Audio delay";q.registerNodeType("audio/delay",D);A.prototype.onExecute=function(){if(this.inputs&&this.inputs.length)for(var c=1;c<this.inputs.length;++c){var a=this.inputs[c];if(null!=a.link){var b=this.getInputData(c);void 0!==
|
||||
b&&(this.audionode[a.name].value=b)}}};A.prototype.onGetInputs=function(){return[["frequency","number"],["detune","number"],["Q","number"]]};p.createAudioNodeWrapper(A);A.title="BiquadFilter";A.desc="Audio filter";q.registerNodeType("audio/biquadfilter",A);h.prototype.onStart=function(){if(!this.audionode.started){this.audionode.started=!0;try{this.audionode.start()}catch(c){}}};h.prototype.onStop=function(){this.audionode.started&&(this.audionode.started=!1,this.audionode.stop())};h.prototype.onPause=
|
||||
function(){this.onStop()};h.prototype.onUnpause=function(){this.onStart()};h.prototype.onExecute=function(){if(this.inputs&&this.inputs.length)for(var c=0;c<this.inputs.length;++c){var a=this.inputs[c];if(null!=a.link){var b=this.getInputData(c);void 0!==b&&(this.audionode[a.name].value=b)}}};h.prototype.onGetInputs=function(){return[["frequency","number"],["detune","number"],["type","string"]]};p.createAudioNodeWrapper(h);h.title="Oscillator";h.desc="Oscillator";q.registerNodeType("audio/oscillator",
|
||||
["R","number"]]};q.createAudioNodeWrapper(u);u.title="ADSR";u.desc="Audio envelope";p.registerNodeType("audio/adsr",u);q.createAudioNodeWrapper(D);D.prototype.onExecute=function(){var c=this.getInputData(1);void 0!==c&&(this.audionode.delayTime.value=c)};D.title="Delay";D.desc="Audio delay";p.registerNodeType("audio/delay",D);A.prototype.onExecute=function(){if(this.inputs&&this.inputs.length)for(var c=1;c<this.inputs.length;++c){var a=this.inputs[c];if(null!=a.link){var b=this.getInputData(c);void 0!==
|
||||
b&&(this.audionode[a.name].value=b)}}};A.prototype.onGetInputs=function(){return[["frequency","number"],["detune","number"],["Q","number"]]};q.createAudioNodeWrapper(A);A.title="BiquadFilter";A.desc="Audio filter";p.registerNodeType("audio/biquadfilter",A);h.prototype.onStart=function(){if(!this.audionode.started){this.audionode.started=!0;try{this.audionode.start()}catch(c){}}};h.prototype.onStop=function(){this.audionode.started&&(this.audionode.started=!1,this.audionode.stop())};h.prototype.onPause=
|
||||
function(){this.onStop()};h.prototype.onUnpause=function(){this.onStart()};h.prototype.onExecute=function(){if(this.inputs&&this.inputs.length)for(var c=0;c<this.inputs.length;++c){var a=this.inputs[c];if(null!=a.link){var b=this.getInputData(c);void 0!==b&&(this.audionode[a.name].value=b)}}};h.prototype.onGetInputs=function(){return[["frequency","number"],["detune","number"],["type","string"]]};q.createAudioNodeWrapper(h);h.title="Oscillator";h.desc="Oscillator";p.registerNodeType("audio/oscillator",
|
||||
h);z.prototype.onExecute=function(){this._last_buffer=this.getInputData(0);var c=this.getInputData(1);void 0!==c&&(this.properties.mark=c);this.setDirtyCanvas(!0,!1)};z.prototype.onDrawForeground=function(c){if(this._last_buffer){var a=this._last_buffer,b=a.length/this.size[0],d=this.size[1];c.fillStyle="black";c.fillRect(0,0,this.size[0],this.size[1]);c.strokeStyle="white";c.beginPath();var e=0;if(this.properties.continuous){c.moveTo(e,d);for(var f=0;f<a.length;f+=b)c.lineTo(e,d-a[f|0]/255*d),e++}else for(f=
|
||||
0;f<a.length;f+=b)c.moveTo(e+0.5,d),c.lineTo(e+0.5,d-a[f|0]/255*d),e++;c.stroke();0<=this.properties.mark&&(a=p.getAudioContext().sampleRate/a.length,e=this.properties.mark/a*2/b,e>=this.size[0]&&(e=this.size[0]-1),c.strokeStyle="red",c.beginPath(),c.moveTo(e,d),c.lineTo(e,0),c.stroke())}};z.title="Visualization";z.desc="Audio Visualization";q.registerNodeType("audio/visualization",z);y.prototype.onExecute=function(){if(this._freqs=this.getInputData(0)){var c=this.properties.band,a=this.getInputData(1);
|
||||
void 0!==a&&(c=a);a=p.getAudioContext().sampleRate/this._freqs.length;a=c/a*2;a>=this._freqs.length?a=this._freqs[this._freqs.length-1]:(c=a|0,a-=c,a=this._freqs[c]*(1-a)+this._freqs[c+1]*a);this.setOutputData(0,a/255*this.properties.amplitude)}};y.prototype.onGetInputs=function(){return[["band","number"]]};y.title="Signal";y.desc="extract the signal of some frequency";q.registerNodeType("audio/signal",y);v.prototype.onAdded=function(c){c.status==LGraph.STATUS_RUNNING&&(this.audionode.onaudioprocess=
|
||||
0;f<a.length;f+=b)c.moveTo(e+0.5,d),c.lineTo(e+0.5,d-a[f|0]/255*d),e++;c.stroke();0<=this.properties.mark&&(a=q.getAudioContext().sampleRate/a.length,e=this.properties.mark/a*2/b,e>=this.size[0]&&(e=this.size[0]-1),c.strokeStyle="red",c.beginPath(),c.moveTo(e,d),c.lineTo(e,0),c.stroke())}};z.title="Visualization";z.desc="Audio Visualization";p.registerNodeType("audio/visualization",z);y.prototype.onExecute=function(){if(this._freqs=this.getInputData(0)){var c=this.properties.band,a=this.getInputData(1);
|
||||
void 0!==a&&(c=a);a=q.getAudioContext().sampleRate/this._freqs.length;a=c/a*2;a>=this._freqs.length?a=this._freqs[this._freqs.length-1]:(c=a|0,a-=c,a=this._freqs[c]*(1-a)+this._freqs[c+1]*a);this.setOutputData(0,a/255*this.properties.amplitude)}};y.prototype.onGetInputs=function(){return[["band","number"]]};y.title="Signal";y.desc="extract the signal of some frequency";p.registerNodeType("audio/signal",y);v.prototype.onAdded=function(c){c.status==LGraph.STATUS_RUNNING&&(this.audionode.onaudioprocess=
|
||||
this._callback)};v["@code"]={widget:"code",type:"code"};v.prototype.onStart=function(){this.audionode.onaudioprocess=this._callback};v.prototype.onStop=function(){this.audionode.onaudioprocess=v._bypass_function};v.prototype.onPause=function(){this.audionode.onaudioprocess=v._bypass_function};v.prototype.onUnpause=function(){this.audionode.onaudioprocess=this._callback};v.prototype.onExecute=function(){};v.prototype.onRemoved=function(){this.audionode.onaudioprocess=v._bypass_function};v.prototype.processCode=
|
||||
function(){try{this._script=new new Function("properties",this.properties.code)(this.properties),this._old_code=this.properties.code,this._callback=this._script.onaudioprocess}catch(c){console.error("Error in onaudioprocess code",c),this._callback=v._bypass_function,this.audionode.onaudioprocess=this._callback}};v.prototype.onPropertyChanged=function(c,a){"code"==c&&(this.properties.code=a,this.processCode(),this.graph&&this.graph.status==LGraph.STATUS_RUNNING&&(this.audionode.onaudioprocess=this._callback))};
|
||||
v.default_function=function(){this.onaudioprocess=function(c){var a=c.inputBuffer;c=c.outputBuffer;for(var b=0;b<c.numberOfChannels;b++)for(var d=a.getChannelData(b),e=c.getChannelData(b),f=0;f<a.length;f++)e[f]=d[f]}};p.createAudioNodeWrapper(v);v.title="Script";v.desc="apply script to signal";q.registerNodeType("audio/script",v);G.title="Destination";G.desc="Audio output";q.registerNodeType("audio/destination",G)})(this);
|
||||
v.default_function=function(){this.onaudioprocess=function(c){var a=c.inputBuffer;c=c.outputBuffer;for(var b=0;b<c.numberOfChannels;b++)for(var d=a.getChannelData(b),e=c.getChannelData(b),f=0;f<a.length;f++)e[f]=d[f]}};q.createAudioNodeWrapper(v);v.title="Script";v.desc="apply script to signal";p.registerNodeType("audio/script",v);G.title="Destination";G.desc="Audio output";p.registerNodeType("audio/destination",G)})(this);
|
||||
(function(B){function c(){this.size=[60,20];this.addInput("send",n.ACTION);this.addOutput("received",n.EVENT);this.addInput("in",0);this.addOutput("out",0);this.properties={url:"",room:"lgraph",only_send_changes:!0};this._ws=null;this._last_sent_data=[];this._last_received_data=[]}function m(){this.room_widget=this.addWidget("text","Room","lgraph",this.setRoom.bind(this));this.addWidget("button","Reconnect",null,this.connectSocket.bind(this));this.addInput("send",n.ACTION);this.addOutput("received",
|
||||
n.EVENT);this.addInput("in",0);this.addOutput("out",0);this.properties={url:"tamats.com:55000",room:"lgraph",only_send_changes:!0};this._server=null;this.connectSocket();this._last_sent_data=[];this._last_received_data=[];"undefined"==typeof SillyClient&&console.warn("remember to add SillyClient.js to your project: https://tamats.com/projects/sillyserver/src/sillyclient.js")}var n=B.LiteGraph;c.title="WebSocket";c.desc="Send data through a websocket";c.prototype.onPropertyChanged=function(c,n){"url"==
|
||||
c&&this.connectSocket()};c.prototype.onExecute=function(){!this._ws&&this.properties.url&&this.connectSocket();if(this._ws&&this._ws.readyState==WebSocket.OPEN){for(var c=this.properties.room,n=this.properties.only_send_changes,e=1;e<this.inputs.length;++e){var m=this.getInputData(e);if(null!=m){var w;try{w=JSON.stringify({type:0,room:c,channel:e,data:m})}catch(u){continue}n&&this._last_sent_data[e]==w||(this._last_sent_data[e]=w,this._ws.send(w))}}for(e=1;e<this.outputs.length;++e)this.setOutputData(e,
|
||||
this._last_received_data[e]);"#AFA"==this.boxcolor&&(this.boxcolor="#6C6")}};c.prototype.connectSocket=function(){var c=this,m=this.properties.url;"ws"!=m.substr(0,2)&&(m="ws://"+m);this._ws=new WebSocket(m);this._ws.onopen=function(){console.log("ready");c.boxcolor="#6C6"};this._ws.onmessage=function(e){c.boxcolor="#AFA";var m=JSON.parse(e.data);if(!m.room||m.room==this.properties.room)if(1==e.data.type)if(m.data.object_class&&n[m.data.object_class]){e=null;try{e=new n[m.data.object_class](m.data),
|
||||
c.triggerSlot(0,e)}catch(x){}}else c.triggerSlot(0,m.data);else c._last_received_data[e.data.channel||0]=m.data};this._ws.onerror=function(e){console.log("couldnt connect to websocket");c.boxcolor="#E88"};this._ws.onclose=function(e){console.log("connection closed");c.boxcolor="#000"}};c.prototype.send=function(c){this._ws&&this._ws.readyState==WebSocket.OPEN&&this._ws.send(JSON.stringify({type:1,msg:c}))};c.prototype.onAction=function(c,m){this._ws&&this._ws.readyState==WebSocket.OPEN&&this._ws.send({type:1,
|
||||
room:this.properties.room,action:c,data:m})};c.prototype.onGetInputs=function(){return[["in",0]]};c.prototype.onGetOutputs=function(){return[["out",0]]};n.registerNodeType("network/websocket",c);m.title="SillyClient";m.desc="Connects to SillyServer to broadcast messages";m.prototype.onPropertyChanged=function(c,m){"room"==c&&(this.room_widget.value=m);this.connectSocket()};m.prototype.setRoom=function(c){this.properties.room=c;this.room_widget.value=c;this.connectSocket()};m.prototype.onDrawForeground=
|
||||
function(){for(var c=1;c<this.inputs.length;++c){var m=this.inputs[c];m.label="in_"+c}for(c=1;c<this.outputs.length;++c)m=this.outputs[c],m.label="out_"+c};m.prototype.onExecute=function(){if(this._server&&this._server.is_connected){for(var c=this.properties.only_send_changes,m=1;m<this.inputs.length;++m){var e=this.getInputData(m),n=this._last_sent_data[m];if(null!=e){if(c){var w=!0;if(e&&e.length&&n&&n.length==e.length&&e.constructor!==String)for(var u=0;u<e.length;++u){if(n[u]!=e[u]){w=!1;break}}else this._last_sent_data[m]!=
|
||||
this._last_received_data[e]);"#AFA"==this.boxcolor&&(this.boxcolor="#6C6")}};c.prototype.connectSocket=function(){var c=this,m=this.properties.url;"ws"!=m.substr(0,2)&&(m="ws://"+m);this._ws=new WebSocket(m);this._ws.onopen=function(){console.log("ready");c.boxcolor="#6C6"};this._ws.onmessage=function(e){c.boxcolor="#AFA";e=JSON.parse(e.data);if(!e.room||e.room==c.properties.room)if(1==e.type)if(e.data.object_class&&n[e.data.object_class]){var m=null;try{m=new n[e.data.object_class](e.data),c.triggerSlot(0,
|
||||
m)}catch(x){}}else c.triggerSlot(0,e.data);else c._last_received_data[e.channel||0]=e.data};this._ws.onerror=function(e){console.log("couldnt connect to websocket");c.boxcolor="#E88"};this._ws.onclose=function(e){console.log("connection closed");c.boxcolor="#000"}};c.prototype.send=function(c){this._ws&&this._ws.readyState==WebSocket.OPEN&&this._ws.send(JSON.stringify({type:1,msg:c}))};c.prototype.onAction=function(c,m){this._ws&&this._ws.readyState==WebSocket.OPEN&&this._ws.send({type:1,room:this.properties.room,
|
||||
action:c,data:m})};c.prototype.onGetInputs=function(){return[["in",0]]};c.prototype.onGetOutputs=function(){return[["out",0]]};n.registerNodeType("network/websocket",c);m.title="SillyClient";m.desc="Connects to SillyServer to broadcast messages";m.prototype.onPropertyChanged=function(c,m){"room"==c&&(this.room_widget.value=m);this.connectSocket()};m.prototype.setRoom=function(c){this.properties.room=c;this.room_widget.value=c;this.connectSocket()};m.prototype.onDrawForeground=function(){for(var c=
|
||||
1;c<this.inputs.length;++c){var m=this.inputs[c];m.label="in_"+c}for(c=1;c<this.outputs.length;++c)m=this.outputs[c],m.label="out_"+c};m.prototype.onExecute=function(){if(this._server&&this._server.is_connected){for(var c=this.properties.only_send_changes,m=1;m<this.inputs.length;++m){var e=this.getInputData(m),n=this._last_sent_data[m];if(null!=e){if(c){var w=!0;if(e&&e.length&&n&&n.length==e.length&&e.constructor!==String)for(var u=0;u<e.length;++u){if(n[u]!=e[u]){w=!1;break}}else this._last_sent_data[m]!=
|
||||
e&&(w=!1);if(w)continue}this._server.sendMessage({type:0,channel:m,data:e});if(e.length&&e.constructor!==String)if(this._last_sent_data[m])for(this._last_sent_data[m].length=e.length,u=0;u<e.length;++u)this._last_sent_data[m][u]=e[u];else this._last_sent_data[m]=e.constructor===Array?e.concat():new e.constructor(e);else this._last_sent_data[m]=e}}for(m=1;m<this.outputs.length;++m)this.setOutputData(m,this._last_received_data[m]);"#AFA"==this.boxcolor&&(this.boxcolor="#6C6")}};m.prototype.connectSocket=
|
||||
function(){var c=this;if("undefined"==typeof SillyClient)this._error||console.error("SillyClient node cannot be used, you must include SillyServer.js"),this._error=!0;else if(this._server=new SillyClient,this._server.on_ready=function(){console.log("ready");c.boxcolor="#6C6"},this._server.on_message=function(e,m){var w=null;try{w=JSON.parse(m)}catch(u){return}if(1==w.type)if(w.data.object_class&&n[w.data.object_class]){var x=null;try{x=new n[w.data.object_class](w.data),c.triggerSlot(0,x)}catch(A){return}}else c.triggerSlot(0,
|
||||
w.data);else c._last_received_data[w.channel||0]=w.data;c.boxcolor="#AFA"},this._server.on_error=function(e){console.log("couldnt connect to websocket");c.boxcolor="#E88"},this._server.on_close=function(e){console.log("connection closed");c.boxcolor="#000"},this.properties.url&&this.properties.room){try{this._server.connect(this.properties.url,this.properties.room)}catch(m){console.error("SillyServer error: "+m);this._server=null;return}this._final_url=this.properties.url+"/"+this.properties.room}};
|
||||
|
||||
@@ -1555,7 +1555,7 @@
|
||||
|
||||
/**
|
||||
* Tell this graph it has a global graph input of this type
|
||||
* @method addInput
|
||||
* @method addGlobalInput
|
||||
* @param {String} name
|
||||
* @param {String} type
|
||||
* @param {*} value [optional]
|
||||
@@ -1581,7 +1581,7 @@
|
||||
|
||||
/**
|
||||
* Assign a data to the global graph input
|
||||
* @method setInputData
|
||||
* @method setGlobalInputData
|
||||
* @param {String} name
|
||||
* @param {*} data
|
||||
*/
|
||||
@@ -10194,8 +10194,8 @@ LGraphNode.prototype.executeAction = function(action)
|
||||
|
||||
//API *************************************************
|
||||
//like rect but rounded corners
|
||||
if (this.CanvasRenderingContext2D) {
|
||||
CanvasRenderingContext2D.prototype.roundRect = function(
|
||||
if (global.CanvasRenderingContext2D) {
|
||||
global.CanvasRenderingContext2D.prototype.roundRect = function(
|
||||
x,
|
||||
y,
|
||||
width,
|
||||
|
||||
Reference in New Issue
Block a user