@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
48 lines (45 loc) • 1.49 kB
text/typescript
import {GlType} from './../../../../poly/registers/nodes/types/Gl';
import {NodeContext} from './../../../../poly/NodeContext';
import {BaseGlParentNode} from '../Controller';
import {BaseGlNodeType} from '../../_Base';
export class GlNodeFinder {
static findOutputNodes(node: BaseGlParentNode) {
const output_nodes = node.nodesByType(GlType.OUTPUT);
return output_nodes;
}
static findParamGeneratingNodes(node: BaseGlParentNode) {
const list: BaseGlNodeType[] = [];
node.childrenController?.traverseChildren(
(child) => {
const childGlNode = child as BaseGlNodeType;
if (childGlNode.paramsGenerating()) {
list.push(childGlNode);
}
},
(child) => {
if (!child.childrenController) {
return child.context() == NodeContext.GL;
} else {
return child.context() == NodeContext.GL && child.childrenController.context == NodeContext.GL;
}
}
);
return list;
}
static findVaryingNodes(node: BaseGlParentNode) {
const nodes = node.nodesByType(GlType.VARYING_WRITE);
return nodes;
}
static findAttributeExportNodes(node: BaseGlParentNode) {
const nodes = node.nodesByType(GlType.ATTRIBUTE);
return nodes.filter((node) => {
// do not use attributes that are used as an input, as export
// return (node.used_output_names().length == 0) &&
return node.isExporting();
});
}
static findAjacencyNodes(node: BaseGlParentNode) {
const nodes = node.nodesByType(GlType.ADJACENT_POINTS_ATTRIB_SMOOTH);
return nodes;
}
}