@shaderfrog/core 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/engine.js +28 -19
- package/graph/base-node.js +5 -1
- package/graph/code-nodes.js +9 -4
- package/graph/context.js +39 -29
- package/graph/data-nodes.js +27 -12
- package/graph/edge.js +11 -6
- package/graph/evaluate.js +10 -5
- package/graph/graph-node.js +28 -20
- package/graph/graph-types.js +10 -7
- package/graph/graph.js +129 -102
- package/graph/graph.test.js +41 -36
- package/graph/index.js +27 -11
- package/graph/parsers.js +45 -39
- package/graph/shader-sections.js +36 -24
- package/index.js +19 -3
- package/package.json +1 -1
- package/plugins/babylon/bablyengine.js +86 -78
- package/plugins/babylon/importers.js +7 -5
- package/plugins/babylon/index.js +5 -2
- package/plugins/playcanvas/importers.js +5 -3
- package/plugins/playcanvas/index.js +5 -2
- package/plugins/playcanvas/playengine.js +96 -64
- package/plugins/three/importers.js +5 -3
- package/plugins/three/index.js +6 -2
- package/plugins/three/threngine.js +122 -111
- package/strategy/assignemntTo.js +13 -8
- package/strategy/declarationOf.js +13 -8
- package/strategy/hardCode.js +9 -4
- package/strategy/index.js +25 -9
- package/strategy/inject.js +13 -8
- package/strategy/namedAttribute.js +13 -8
- package/strategy/strategy.js +23 -19
- package/strategy/stratgies.test.js +59 -31
- package/strategy/texture2D.js +15 -10
- package/strategy/uniform.js +17 -12
- package/strategy/variable.js +14 -9
- package/util/ast.js +59 -40
- package/util/ensure.js +5 -1
- package/util/id.js +5 -1
package/engine.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __assign = (this && this.__assign) || function () {
|
|
2
3
|
__assign = Object.assign || function(t) {
|
|
3
4
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
@@ -34,12 +35,17 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
34
35
|
}
|
|
35
36
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
36
37
|
};
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.collectInitialEvaluatedGraphProperties = exports.convertToEngine = exports.convertNode = exports.EngineNodeType = void 0;
|
|
43
|
+
var preprocessor_1 = __importDefault(require("@shaderfrog/glsl-parser/preprocessor"));
|
|
44
|
+
var glsl_parser_1 = require("@shaderfrog/glsl-parser");
|
|
45
|
+
var graph_types_1 = require("./graph/graph-types");
|
|
46
|
+
var lodash_groupby_1 = __importDefault(require("lodash.groupby"));
|
|
47
|
+
var graph_1 = require("./graph/graph");
|
|
48
|
+
var evaluate_1 = require("./graph/evaluate");
|
|
43
49
|
var log = function () {
|
|
44
50
|
var _a;
|
|
45
51
|
var args = [];
|
|
@@ -48,37 +54,38 @@ var log = function () {
|
|
|
48
54
|
}
|
|
49
55
|
return (_a = console.log).call.apply(_a, __spreadArray([console, '\x1b[32m(core)\x1b[0m'], __read(args), false));
|
|
50
56
|
};
|
|
51
|
-
|
|
57
|
+
var EngineNodeType;
|
|
52
58
|
(function (EngineNodeType) {
|
|
53
59
|
EngineNodeType["toon"] = "toon";
|
|
54
60
|
EngineNodeType["phong"] = "phong";
|
|
55
61
|
EngineNodeType["physical"] = "physical";
|
|
56
62
|
EngineNodeType["shader"] = "shader";
|
|
57
63
|
EngineNodeType["binary"] = "binary";
|
|
58
|
-
})(EngineNodeType || (EngineNodeType = {}));
|
|
64
|
+
})(EngineNodeType = exports.EngineNodeType || (exports.EngineNodeType = {}));
|
|
59
65
|
// type EdgeUpdates = { [edgeId: string]: { oldInput: string; newInput: string } };
|
|
60
|
-
|
|
66
|
+
var convertNode = function (node, converter) {
|
|
61
67
|
log("Converting ".concat(node.name, " (").concat(node.id, ")"));
|
|
62
|
-
var preprocessed =
|
|
68
|
+
var preprocessed = (0, preprocessor_1.default)(node.source, {
|
|
63
69
|
preserveComments: true,
|
|
64
70
|
preserve: {
|
|
65
71
|
version: function () { return true; },
|
|
66
72
|
define: function () { return true; },
|
|
67
73
|
},
|
|
68
74
|
});
|
|
69
|
-
var ast = parser.parse(preprocessed);
|
|
75
|
+
var ast = glsl_parser_1.parser.parse(preprocessed);
|
|
70
76
|
converter.convertAst(ast, node.stage);
|
|
71
|
-
var source = generate(ast);
|
|
77
|
+
var source = (0, glsl_parser_1.generate)(ast);
|
|
72
78
|
return __assign(__assign({}, node), { source: source });
|
|
73
79
|
};
|
|
74
|
-
|
|
80
|
+
exports.convertNode = convertNode;
|
|
81
|
+
var convertToEngine = function (oldEngine, newEngine, graph) {
|
|
75
82
|
var converter = newEngine.importers[oldEngine.name];
|
|
76
83
|
if (!converter) {
|
|
77
84
|
throw new Error("The engine ".concat(newEngine.name, " has no importer for ").concat(oldEngine.name));
|
|
78
85
|
}
|
|
79
86
|
log("Attempting to convert from ".concat(newEngine.name, " to ").concat(oldEngine.name));
|
|
80
87
|
// const edgeUpdates: EdgeUpdates = {};
|
|
81
|
-
var edgesByNodeId =
|
|
88
|
+
var edgesByNodeId = (0, lodash_groupby_1.default)(graph.edges, 'to');
|
|
82
89
|
var edgeUpdates = {};
|
|
83
90
|
var nodeUpdates = {};
|
|
84
91
|
graph.nodes.forEach(function (node) {
|
|
@@ -94,8 +101,8 @@ export var convertToEngine = function (oldEngine, newEngine, graph) {
|
|
|
94
101
|
throw new Error("Can't convert ".concat(oldEngine.name, " to ").concat(newEngine.name, " because ").concat(newEngine.name, " does not have a \"").concat(node.type, "\" constructor"));
|
|
95
102
|
}
|
|
96
103
|
}
|
|
97
|
-
else if (NodeType.SOURCE === node.type) {
|
|
98
|
-
nodeUpdates[node.id] = convertNode(node, converter);
|
|
104
|
+
else if (graph_types_1.NodeType.SOURCE === node.type) {
|
|
105
|
+
nodeUpdates[node.id] = (0, exports.convertNode)(node, converter);
|
|
99
106
|
}
|
|
100
107
|
// Then update input edges. We only care about engine nodes
|
|
101
108
|
if (node.type in converter.nodeInputMap) {
|
|
@@ -140,6 +147,7 @@ export var convertToEngine = function (oldEngine, newEngine, graph) {
|
|
|
140
147
|
log('Created converted graph', graph);
|
|
141
148
|
return graph;
|
|
142
149
|
};
|
|
150
|
+
exports.convertToEngine = convertToEngine;
|
|
143
151
|
/**
|
|
144
152
|
* Create the initial engine node properties for a plugin to create its initial
|
|
145
153
|
* material with. This finds all engine nodes in the graph, finds all their
|
|
@@ -152,11 +160,11 @@ export var convertToEngine = function (oldEngine, newEngine, graph) {
|
|
|
152
160
|
* to be set to a pc.Texture() at runtime, otherwise there's an error about
|
|
153
161
|
* vertex_texCoord0.
|
|
154
162
|
*/
|
|
155
|
-
|
|
163
|
+
var collectInitialEvaluatedGraphProperties = function (engine, graph, defaultPropertySetting) {
|
|
156
164
|
var graphProperties = {};
|
|
157
165
|
// Get all the nodes with properties, meaning engine nodes, and the inputs
|
|
158
166
|
// for each property (property is like "diffuseMap").
|
|
159
|
-
var _a = collectNodeProperties(graph), nodes = _a.nodes, inputs = _a.inputs;
|
|
167
|
+
var _a = (0, graph_1.collectNodeProperties)(graph), nodes = _a.nodes, inputs = _a.inputs;
|
|
160
168
|
Object.entries(inputs).forEach(function (_a) {
|
|
161
169
|
var _b = __read(_a, 2), nodeId = _b[0], nodeInputs = _b[1];
|
|
162
170
|
// For every node with properties... There might be mulitple if there are
|
|
@@ -194,7 +202,7 @@ export var collectInitialEvaluatedGraphProperties = function (engine, graph, def
|
|
|
194
202
|
}
|
|
195
203
|
else {
|
|
196
204
|
try {
|
|
197
|
-
graphProperties[input.property] = evaluateNode(engine, graph, fromNode);
|
|
205
|
+
graphProperties[input.property] = (0, evaluate_1.evaluateNode)(engine, graph, fromNode);
|
|
198
206
|
}
|
|
199
207
|
catch (err) {
|
|
200
208
|
console.error('Tried to evaluate a non-data node!', {
|
|
@@ -207,3 +215,4 @@ export var collectInitialEvaluatedGraphProperties = function (engine, graph, def
|
|
|
207
215
|
});
|
|
208
216
|
return graphProperties;
|
|
209
217
|
};
|
|
218
|
+
exports.collectInitialEvaluatedGraphProperties = collectInitialEvaluatedGraphProperties;
|
package/graph/base-node.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nodeInput = void 0;
|
|
4
|
+
var nodeInput = function (displayName, id, type, dataType, accepts, bakeable, property) { return ({
|
|
2
5
|
displayName: displayName,
|
|
3
6
|
id: id,
|
|
4
7
|
type: type,
|
|
@@ -7,3 +10,4 @@ export var nodeInput = function (displayName, id, type, dataType, accepts, bakea
|
|
|
7
10
|
bakeable: bakeable,
|
|
8
11
|
property: property,
|
|
9
12
|
}); };
|
|
13
|
+
exports.nodeInput = nodeInput;
|
package/graph/code-nodes.js
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SourceType = exports.property = exports.mapInputName = void 0;
|
|
4
|
+
var mapInputName = function (node, _a) {
|
|
2
5
|
var _b, _c;
|
|
3
6
|
var id = _a.id, displayName = _a.displayName;
|
|
4
7
|
return ((_c = (_b = node.config) === null || _b === void 0 ? void 0 : _b.inputMapping) === null || _c === void 0 ? void 0 : _c[id]) || displayName;
|
|
5
8
|
};
|
|
6
|
-
|
|
9
|
+
exports.mapInputName = mapInputName;
|
|
10
|
+
var property = function (displayName, property, type, fillerName, defaultValue) { return ({
|
|
7
11
|
displayName: displayName,
|
|
8
12
|
type: type,
|
|
9
13
|
property: property,
|
|
10
14
|
fillerName: fillerName,
|
|
11
15
|
defaultValue: defaultValue,
|
|
12
16
|
}); };
|
|
13
|
-
|
|
17
|
+
exports.property = property;
|
|
18
|
+
var SourceType;
|
|
14
19
|
(function (SourceType) {
|
|
15
20
|
SourceType["SHADER_PROGRAM"] = "Shader Program";
|
|
16
21
|
SourceType["EXPRESSION"] = "Expression";
|
|
17
22
|
SourceType["FN_BODY_FRAGMENT"] = "Function Body Fragment";
|
|
18
|
-
})(SourceType || (SourceType = {}));
|
|
23
|
+
})(SourceType = exports.SourceType || (exports.SourceType = {}));
|
package/graph/context.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __assign = (this && this.__assign) || function () {
|
|
2
3
|
__assign = Object.assign || function(t) {
|
|
3
4
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
@@ -70,11 +71,16 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
70
71
|
}
|
|
71
72
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
72
73
|
};
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
75
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
76
|
+
};
|
|
77
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
78
|
+
exports.computeGraphContext = exports.computeAllContexts = exports.computeContextForNodes = exports.isError = void 0;
|
|
79
|
+
var lodash_groupby_1 = __importDefault(require("lodash.groupby"));
|
|
80
|
+
var code_nodes_1 = require("./code-nodes");
|
|
81
|
+
var graph_types_1 = require("./graph-types");
|
|
82
|
+
var graph_1 = require("./graph");
|
|
83
|
+
var parsers_1 = require("./parsers");
|
|
78
84
|
var makeError = function (nodeId) {
|
|
79
85
|
var errors = [];
|
|
80
86
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
@@ -86,23 +92,24 @@ var makeError = function (nodeId) {
|
|
|
86
92
|
errors: errors,
|
|
87
93
|
});
|
|
88
94
|
};
|
|
89
|
-
|
|
95
|
+
var isError = function (test) {
|
|
90
96
|
return (test === null || test === void 0 ? void 0 : test.type) === 'errors';
|
|
91
97
|
};
|
|
98
|
+
exports.isError = isError;
|
|
92
99
|
// Merge existing node inputs, and inputs based on properties, with new ones
|
|
93
100
|
// found from the source code, using the *id* as the uniqueness key. Any filler input gets
|
|
94
101
|
// merged into property inputs with the same id. This preserves the
|
|
95
102
|
// "baked" property on node inputs which is toggle-able in the graph
|
|
96
103
|
var collapseNodeInputs = function (node, updatedInputs) {
|
|
97
|
-
return Object.values(
|
|
104
|
+
return Object.values((0, lodash_groupby_1.default)(__spreadArray(__spreadArray([], __read(updatedInputs), false), __read(node.inputs), false), function (i) { return i.id; })).map(function (dupes) { return dupes.reduce(function (node, dupe) { return (__assign(__assign({}, node), dupe)); }); });
|
|
98
105
|
};
|
|
99
106
|
var computeNodeContext = function (engineContext, engine, graph, node) { return __awaiter(void 0, void 0, void 0, function () {
|
|
100
107
|
var parser, sibling, onBeforeCompile, manipulateAst, inputEdges, ast, dataInputs, computedInputs, nodeContext;
|
|
101
108
|
return __generator(this, function (_a) {
|
|
102
109
|
switch (_a.label) {
|
|
103
110
|
case 0:
|
|
104
|
-
parser = __assign(__assign({}, (coreParsers[node.type] || coreParsers[NodeType.SOURCE])), (engine.parsers[node.type] || {}));
|
|
105
|
-
sibling = findLinkedNode(graph, node.id);
|
|
111
|
+
parser = __assign(__assign({}, (parsers_1.coreParsers[node.type] || parsers_1.coreParsers[graph_types_1.NodeType.SOURCE])), (engine.parsers[node.type] || {}));
|
|
112
|
+
sibling = (0, graph_1.findLinkedNode)(graph, node.id);
|
|
106
113
|
onBeforeCompile = parser.onBeforeCompile, manipulateAst = parser.manipulateAst;
|
|
107
114
|
if (!onBeforeCompile) return [3 /*break*/, 2];
|
|
108
115
|
return [4 /*yield*/, onBeforeCompile(graph, engineContext, node, sibling)];
|
|
@@ -121,7 +128,7 @@ var computeNodeContext = function (engineContext, engine, graph, node) { return
|
|
|
121
128
|
console.error('Error parsing source code!', { error: error, node: node });
|
|
122
129
|
return [2 /*return*/, makeError(node.id, error)];
|
|
123
130
|
}
|
|
124
|
-
dataInputs =
|
|
131
|
+
dataInputs = (0, lodash_groupby_1.default)((0, graph_1.filterGraphFromNode)(graph, node, {
|
|
125
132
|
input: function (input, b, c, fromNode) {
|
|
126
133
|
return input.bakeable && (fromNode === null || fromNode === void 0 ? void 0 : fromNode.type) === 'source';
|
|
127
134
|
},
|
|
@@ -129,7 +136,7 @@ var computeNodeContext = function (engineContext, engine, graph, node) { return
|
|
|
129
136
|
computedInputs = parser.findInputs(engineContext, ast, inputEdges, node, sibling);
|
|
130
137
|
node.inputs = collapseNodeInputs(node, computedInputs.map(function (_a) {
|
|
131
138
|
var _b = __read(_a, 1), i = _b[0];
|
|
132
|
-
return (__assign(__assign({}, i), { displayName: mapInputName(node, i) }));
|
|
139
|
+
return (__assign(__assign({}, i), { displayName: (0, code_nodes_1.mapInputName)(node, i) }));
|
|
133
140
|
})).map(function (input) { return (__assign(__assign({}, input), (input.id in dataInputs ? { baked: true } : {}))); });
|
|
134
141
|
nodeContext = {
|
|
135
142
|
ast: ast,
|
|
@@ -148,18 +155,18 @@ var computeNodeContext = function (engineContext, engine, graph, node) { return
|
|
|
148
155
|
// an expression, where we want to be in the context of other variables
|
|
149
156
|
// TODO: Use global undefined engine variables here?
|
|
150
157
|
if (node.config.mangle !== false &&
|
|
151
|
-
node.sourceType !== SourceType.EXPRESSION &&
|
|
152
|
-
node.sourceType !== SourceType.FN_BODY_FRAGMENT) {
|
|
153
|
-
mangleEntireProgram(engine, ast, node, findLinkedNode(graph, node.id));
|
|
158
|
+
node.sourceType !== code_nodes_1.SourceType.EXPRESSION &&
|
|
159
|
+
node.sourceType !== code_nodes_1.SourceType.FN_BODY_FRAGMENT) {
|
|
160
|
+
(0, graph_1.mangleEntireProgram)(engine, ast, node, (0, graph_1.findLinkedNode)(graph, node.id));
|
|
154
161
|
}
|
|
155
162
|
return [2 /*return*/, nodeContext];
|
|
156
163
|
}
|
|
157
164
|
});
|
|
158
165
|
}); };
|
|
159
|
-
|
|
166
|
+
var computeContextForNodes = function (engineContext, engine, graph, nodes) { return __awaiter(void 0, void 0, void 0, function () {
|
|
160
167
|
return __generator(this, function (_a) {
|
|
161
168
|
return [2 /*return*/, nodes
|
|
162
|
-
.filter(isSourceNode)
|
|
169
|
+
.filter(graph_1.isSourceNode)
|
|
163
170
|
.reduce(function (ctx, node) { return __awaiter(void 0, void 0, void 0, function () {
|
|
164
171
|
var context, nodeContextOrError;
|
|
165
172
|
return __generator(this, function (_a) {
|
|
@@ -167,13 +174,13 @@ export var computeContextForNodes = function (engineContext, engine, graph, node
|
|
|
167
174
|
case 0: return [4 /*yield*/, ctx];
|
|
168
175
|
case 1:
|
|
169
176
|
context = _a.sent();
|
|
170
|
-
if (isError(context)) {
|
|
177
|
+
if ((0, exports.isError)(context)) {
|
|
171
178
|
return [2 /*return*/, context];
|
|
172
179
|
}
|
|
173
180
|
return [4 /*yield*/, computeNodeContext(engineContext, engine, graph, node)];
|
|
174
181
|
case 2:
|
|
175
182
|
nodeContextOrError = _a.sent();
|
|
176
|
-
if (isError(nodeContextOrError)) {
|
|
183
|
+
if ((0, exports.isError)(nodeContextOrError)) {
|
|
177
184
|
return [2 /*return*/, nodeContextOrError];
|
|
178
185
|
}
|
|
179
186
|
context[node.id] = __assign(__assign({}, (context[node.id] || {})), nodeContextOrError);
|
|
@@ -183,29 +190,31 @@ export var computeContextForNodes = function (engineContext, engine, graph, node
|
|
|
183
190
|
}); }, Promise.resolve(engineContext.nodes))];
|
|
184
191
|
});
|
|
185
192
|
}); };
|
|
193
|
+
exports.computeContextForNodes = computeContextForNodes;
|
|
186
194
|
/**
|
|
187
195
|
* Compute the context for every node in the graph, done on initial graph load
|
|
188
196
|
* to compute the inputs/outputs for every node
|
|
189
197
|
*/
|
|
190
|
-
|
|
198
|
+
var computeAllContexts = function (engineContext, engine, graph) { return __awaiter(void 0, void 0, void 0, function () {
|
|
191
199
|
var result;
|
|
192
200
|
return __generator(this, function (_a) {
|
|
193
201
|
switch (_a.label) {
|
|
194
|
-
case 0: return [4 /*yield*/, computeContextForNodes(engineContext, engine, graph, graph.nodes)];
|
|
202
|
+
case 0: return [4 /*yield*/, (0, exports.computeContextForNodes)(engineContext, engine, graph, graph.nodes)];
|
|
195
203
|
case 1:
|
|
196
204
|
result = _a.sent();
|
|
197
|
-
if (isError(result)) {
|
|
205
|
+
if ((0, exports.isError)(result)) {
|
|
198
206
|
return [2 /*return*/, result];
|
|
199
207
|
}
|
|
200
208
|
return [2 /*return*/];
|
|
201
209
|
}
|
|
202
210
|
});
|
|
203
211
|
}); };
|
|
212
|
+
exports.computeAllContexts = computeAllContexts;
|
|
204
213
|
/**
|
|
205
214
|
* Compute the contexts for nodes starting from the outputs, working backwards.
|
|
206
215
|
* Used to only (re)-compute context for any actively used nodes
|
|
207
216
|
*/
|
|
208
|
-
|
|
217
|
+
var computeGraphContext = function (engineContext, engine, graph) { return __awaiter(void 0, void 0, void 0, function () {
|
|
209
218
|
var outputFrag, outputVert, vertexIds, fragmentIds, unlinkedNodes, vertNodesOrError, fragNodesOrError;
|
|
210
219
|
return __generator(this, function (_a) {
|
|
211
220
|
switch (_a.label) {
|
|
@@ -218,26 +227,27 @@ export var computeGraphContext = function (engineContext, engine, graph) { retur
|
|
|
218
227
|
if (!outputVert) {
|
|
219
228
|
throw new Error('No vertex output in graph');
|
|
220
229
|
}
|
|
221
|
-
vertexIds = collectConnectedNodes(graph, outputVert);
|
|
222
|
-
fragmentIds = collectConnectedNodes(graph, outputFrag);
|
|
223
|
-
unlinkedNodes = findLinkedVertexNodes(graph, vertexIds);
|
|
224
|
-
return [4 /*yield*/, computeContextForNodes(engineContext, engine, graph, __spreadArray(__spreadArray([
|
|
230
|
+
vertexIds = (0, graph_1.collectConnectedNodes)(graph, outputVert);
|
|
231
|
+
fragmentIds = (0, graph_1.collectConnectedNodes)(graph, outputFrag);
|
|
232
|
+
unlinkedNodes = (0, graph_1.findLinkedVertexNodes)(graph, vertexIds);
|
|
233
|
+
return [4 /*yield*/, (0, exports.computeContextForNodes)(engineContext, engine, graph, __spreadArray(__spreadArray([
|
|
225
234
|
outputVert
|
|
226
235
|
], __read(Object.values(vertexIds).filter(function (node) { return node.id !== outputVert.id; })), false), __read(unlinkedNodes), false))];
|
|
227
236
|
case 1:
|
|
228
237
|
vertNodesOrError = _a.sent();
|
|
229
|
-
if (isError(vertNodesOrError)) {
|
|
238
|
+
if ((0, exports.isError)(vertNodesOrError)) {
|
|
230
239
|
return [2 /*return*/, vertNodesOrError];
|
|
231
240
|
}
|
|
232
|
-
return [4 /*yield*/, computeContextForNodes(engineContext, engine, graph, __spreadArray([
|
|
241
|
+
return [4 /*yield*/, (0, exports.computeContextForNodes)(engineContext, engine, graph, __spreadArray([
|
|
233
242
|
outputFrag
|
|
234
243
|
], __read(Object.values(fragmentIds).filter(function (node) { return node.id !== outputFrag.id; })), false))];
|
|
235
244
|
case 2:
|
|
236
245
|
fragNodesOrError = _a.sent();
|
|
237
|
-
if (isError(fragNodesOrError)) {
|
|
246
|
+
if ((0, exports.isError)(fragNodesOrError)) {
|
|
238
247
|
return [2 /*return*/, fragNodesOrError];
|
|
239
248
|
}
|
|
240
249
|
return [2 /*return*/];
|
|
241
250
|
}
|
|
242
251
|
});
|
|
243
252
|
}); };
|
|
253
|
+
exports.computeGraphContext = computeGraphContext;
|
package/graph/data-nodes.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __assign = (this && this.__assign) || function () {
|
|
2
3
|
__assign = Object.assign || function(t) {
|
|
3
4
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
@@ -9,7 +10,9 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
10
|
};
|
|
10
11
|
return __assign.apply(this, arguments);
|
|
11
12
|
};
|
|
12
|
-
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.colorUniformData = exports.colorNode = exports.vectorUniformData = exports.arrayUniformData = exports.vectorNode = exports.arrayNode = exports.samplerCubeUniformData = exports.samplerCubeNode = exports.textureUniformData = exports.textureNode = exports.numberUniformData = exports.numberNode = void 0;
|
|
15
|
+
var numberNode = function (id, name, position, value, optionals) { return ({
|
|
13
16
|
type: 'number',
|
|
14
17
|
id: id,
|
|
15
18
|
name: name,
|
|
@@ -27,14 +30,16 @@ export var numberNode = function (id, name, position, value, optionals) { return
|
|
|
27
30
|
range: optionals === null || optionals === void 0 ? void 0 : optionals.range,
|
|
28
31
|
stepper: optionals === null || optionals === void 0 ? void 0 : optionals.stepper,
|
|
29
32
|
}); };
|
|
30
|
-
|
|
33
|
+
exports.numberNode = numberNode;
|
|
34
|
+
var numberUniformData = function (name, value, range, stepper) { return ({
|
|
31
35
|
type: 'number',
|
|
32
36
|
name: name,
|
|
33
37
|
value: value,
|
|
34
38
|
range: range,
|
|
35
39
|
stepper: stepper,
|
|
36
40
|
}); };
|
|
37
|
-
|
|
41
|
+
exports.numberUniformData = numberUniformData;
|
|
42
|
+
var textureNode = function (id, name, position, value) { return ({
|
|
38
43
|
type: 'texture',
|
|
39
44
|
id: id,
|
|
40
45
|
name: name,
|
|
@@ -50,8 +55,10 @@ export var textureNode = function (id, name, position, value) { return ({
|
|
|
50
55
|
},
|
|
51
56
|
],
|
|
52
57
|
}); };
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
exports.textureNode = textureNode;
|
|
59
|
+
var textureUniformData = function (name, value) { return ({ type: 'texture', name: name, value: value }); };
|
|
60
|
+
exports.textureUniformData = textureUniformData;
|
|
61
|
+
var samplerCubeNode = function (id, name, position, value) { return ({
|
|
55
62
|
type: 'samplerCube',
|
|
56
63
|
id: id,
|
|
57
64
|
name: name,
|
|
@@ -67,8 +74,10 @@ export var samplerCubeNode = function (id, name, position, value) { return ({
|
|
|
67
74
|
},
|
|
68
75
|
],
|
|
69
76
|
}); };
|
|
70
|
-
|
|
71
|
-
|
|
77
|
+
exports.samplerCubeNode = samplerCubeNode;
|
|
78
|
+
var samplerCubeUniformData = function (name, value) { return ({ type: 'samplerCube', name: name, value: value }); };
|
|
79
|
+
exports.samplerCubeUniformData = samplerCubeUniformData;
|
|
80
|
+
function arrayNode(id, name, position, value) {
|
|
72
81
|
return {
|
|
73
82
|
id: id,
|
|
74
83
|
name: name,
|
|
@@ -87,7 +96,8 @@ export function arrayNode(id, name, position, value) {
|
|
|
87
96
|
type: 'array',
|
|
88
97
|
};
|
|
89
98
|
}
|
|
90
|
-
|
|
99
|
+
exports.arrayNode = arrayNode;
|
|
100
|
+
function vectorNode(id, name, position, value) {
|
|
91
101
|
var dataType = value.length === 2 ? 'vector2' : value.length === 3 ? 'vector3' : 'vector4';
|
|
92
102
|
return __assign({ id: id, name: name, position: position, inputs: [], outputs: [
|
|
93
103
|
{
|
|
@@ -102,18 +112,21 @@ export function vectorNode(id, name, position, value) {
|
|
|
102
112
|
? { value: value, dimensions: 3, type: 'vector3' }
|
|
103
113
|
: { value: value, dimensions: 4, type: 'vector4' }));
|
|
104
114
|
}
|
|
105
|
-
|
|
115
|
+
exports.vectorNode = vectorNode;
|
|
116
|
+
var arrayUniformData = function (name, value) { return ({
|
|
106
117
|
name: name,
|
|
107
118
|
value: value,
|
|
108
119
|
dimensions: value.length,
|
|
109
120
|
type: 'array',
|
|
110
121
|
}); };
|
|
111
|
-
|
|
122
|
+
exports.arrayUniformData = arrayUniformData;
|
|
123
|
+
var vectorUniformData = function (name, value) { return (__assign({ name: name }, (value.length === 2
|
|
112
124
|
? { value: value, dimensions: 2, type: 'vector2' }
|
|
113
125
|
: value.length === 3
|
|
114
126
|
? { value: value, dimensions: 3, type: 'vector3' }
|
|
115
127
|
: { value: value, dimensions: 4, type: 'vector4' }))); };
|
|
116
|
-
|
|
128
|
+
exports.vectorUniformData = vectorUniformData;
|
|
129
|
+
function colorNode(id, name, position, value) {
|
|
117
130
|
var dataType = value.length === 3 ? 'rgb' : 'rgba';
|
|
118
131
|
return __assign({ id: id, name: name, position: position, inputs: [], outputs: [
|
|
119
132
|
{
|
|
@@ -126,6 +139,8 @@ export function colorNode(id, name, position, value) {
|
|
|
126
139
|
? { value: value, dimensions: 3, type: 'rgb' }
|
|
127
140
|
: { value: value, dimensions: 4, type: 'rgba' }));
|
|
128
141
|
}
|
|
129
|
-
|
|
142
|
+
exports.colorNode = colorNode;
|
|
143
|
+
var colorUniformData = function (name, value) { return (__assign({ name: name }, (value.length === 3
|
|
130
144
|
? { value: value, dimensions: 3, type: 'rgb' }
|
|
131
145
|
: { value: value, dimensions: 4, type: 'rgba' }))); };
|
|
146
|
+
exports.colorUniformData = colorUniformData;
|
package/graph/edge.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.linkFromVertToFrag = exports.makeEdge = void 0;
|
|
4
|
+
var graph_types_1 = require("./graph-types");
|
|
5
|
+
var makeEdge = function (id, from, to, output, input, type) { return ({ id: id, from: from, to: to, output: output, input: input, type: type }); };
|
|
6
|
+
exports.makeEdge = makeEdge;
|
|
7
|
+
var linkFromVertToFrag = function (id, vertId, fragId) {
|
|
8
|
+
return (0, exports.makeEdge)(id, vertId, fragId, graph_types_1.LinkHandle.NEXT_STAGE, // output from next_stage
|
|
9
|
+
graph_types_1.LinkHandle.PREVIOUS_STAGE, // input to previous_stage
|
|
10
|
+
graph_types_1.EdgeLink.NEXT_STAGE);
|
|
7
11
|
};
|
|
12
|
+
exports.linkFromVertToFrag = linkFromVertToFrag;
|
package/graph/evaluate.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.evaluateNode = exports.toGlsl = void 0;
|
|
4
|
+
var parsers_1 = require("./parsers");
|
|
5
|
+
var toGlsl = function (node) {
|
|
3
6
|
var type = node.type, value = node.value;
|
|
4
7
|
if (type === 'vector2') {
|
|
5
8
|
return "vec2(".concat(value[0], ", ").concat(value[1], ")");
|
|
@@ -12,16 +15,18 @@ export var toGlsl = function (node) {
|
|
|
12
15
|
}
|
|
13
16
|
throw new Error("Unknown GLSL inline type: \"".concat(node.type, "\""));
|
|
14
17
|
};
|
|
15
|
-
|
|
18
|
+
exports.toGlsl = toGlsl;
|
|
19
|
+
var evaluateNode = function (engine, graph, node) {
|
|
16
20
|
// TODO: Data nodes themselves should have evaluators
|
|
17
21
|
if ('value' in node) {
|
|
18
22
|
return engine.evaluateNode(node);
|
|
19
23
|
}
|
|
20
|
-
var evaluate = coreParsers[node.type].evaluate;
|
|
24
|
+
var evaluate = parsers_1.coreParsers[node.type].evaluate;
|
|
21
25
|
if (!evaluate) {
|
|
22
26
|
throw new Error("No evaluator for node ".concat(node.name, " (type: ").concat(node.type, ", id: ").concat(node.id, ")"));
|
|
23
27
|
}
|
|
24
28
|
var inputEdges = graph.edges.filter(function (edge) { return edge.to === node.id; });
|
|
25
29
|
var inputNodes = inputEdges.map(function (edge) { return graph.nodes.find(function (node) { return node.id === edge.from; }); });
|
|
26
|
-
return evaluate(node, inputEdges, inputNodes, evaluateNode.bind(null, engine, graph));
|
|
30
|
+
return evaluate(node, inputEdges, inputNodes, exports.evaluateNode.bind(null, engine, graph));
|
|
27
31
|
};
|
|
32
|
+
exports.evaluateNode = evaluateNode;
|
package/graph/graph-node.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.multiplyNode = exports.addNode = exports.expressionNode = exports.outputNode = exports.sourceNode = void 0;
|
|
4
|
+
var graph_types_1 = require("./graph-types");
|
|
5
|
+
var strategy_1 = require("../strategy");
|
|
6
|
+
var code_nodes_1 = require("./code-nodes");
|
|
7
|
+
var sourceNode = function (id, name, position, config, source, stage, originalEngine) { return ({
|
|
5
8
|
id: id,
|
|
6
9
|
name: name,
|
|
7
|
-
type: NodeType.SOURCE,
|
|
8
|
-
sourceType: SourceType.SHADER_PROGRAM,
|
|
10
|
+
type: graph_types_1.NodeType.SOURCE,
|
|
11
|
+
sourceType: code_nodes_1.SourceType.SHADER_PROGRAM,
|
|
9
12
|
engine: false,
|
|
10
13
|
config: config,
|
|
11
14
|
position: position,
|
|
@@ -22,12 +25,13 @@ export var sourceNode = function (id, name, position, config, source, stage, ori
|
|
|
22
25
|
stage: stage,
|
|
23
26
|
originalEngine: originalEngine,
|
|
24
27
|
}); };
|
|
25
|
-
|
|
28
|
+
exports.sourceNode = sourceNode;
|
|
29
|
+
var outputNode = function (id, name, position, stage) { return ({
|
|
26
30
|
id: id,
|
|
27
31
|
name: name,
|
|
28
32
|
position: position,
|
|
29
|
-
type: NodeType.OUTPUT,
|
|
30
|
-
sourceType: SourceType.SHADER_PROGRAM,
|
|
33
|
+
type: graph_types_1.NodeType.OUTPUT,
|
|
34
|
+
sourceType: code_nodes_1.SourceType.SHADER_PROGRAM,
|
|
31
35
|
engine: false,
|
|
32
36
|
config: {
|
|
33
37
|
version: 3,
|
|
@@ -42,7 +46,7 @@ export var outputNode = function (id, name, position, stage) { return ({
|
|
|
42
46
|
filler_gl_Position: 'Position',
|
|
43
47
|
},
|
|
44
48
|
strategies: [
|
|
45
|
-
assignemntToStrategy(stage === 'fragment' ? 'frogFragOut' : 'gl_Position'),
|
|
49
|
+
(0, strategy_1.assignemntToStrategy)(stage === 'fragment' ? 'frogFragOut' : 'gl_Position'),
|
|
46
50
|
],
|
|
47
51
|
},
|
|
48
52
|
inputs: [],
|
|
@@ -54,20 +58,21 @@ export var outputNode = function (id, name, position, stage) { return ({
|
|
|
54
58
|
"\n#version 300 es\nprecision highp float;\n\nvoid main() {\n gl_Position = vec4(1.0);\n}\n",
|
|
55
59
|
stage: stage,
|
|
56
60
|
}); };
|
|
57
|
-
|
|
61
|
+
exports.outputNode = outputNode;
|
|
62
|
+
var expressionNode = function (id, name, position, source) { return ({
|
|
58
63
|
id: id,
|
|
59
64
|
name: name,
|
|
60
65
|
position: position,
|
|
61
|
-
type: NodeType.SOURCE,
|
|
66
|
+
type: graph_types_1.NodeType.SOURCE,
|
|
62
67
|
engine: false,
|
|
63
|
-
sourceType: SourceType.EXPRESSION,
|
|
68
|
+
sourceType: code_nodes_1.SourceType.EXPRESSION,
|
|
64
69
|
stage: undefined,
|
|
65
70
|
config: {
|
|
66
71
|
uniforms: [],
|
|
67
72
|
version: 3,
|
|
68
73
|
preprocess: false,
|
|
69
74
|
inputMapping: {},
|
|
70
|
-
strategies: [variableStrategy()],
|
|
75
|
+
strategies: [(0, strategy_1.variableStrategy)()],
|
|
71
76
|
},
|
|
72
77
|
inputs: [],
|
|
73
78
|
outputs: [
|
|
@@ -79,11 +84,12 @@ export var expressionNode = function (id, name, position, source) { return ({
|
|
|
79
84
|
],
|
|
80
85
|
source: source,
|
|
81
86
|
}); };
|
|
82
|
-
|
|
87
|
+
exports.expressionNode = expressionNode;
|
|
88
|
+
var addNode = function (id, position) { return ({
|
|
83
89
|
id: id,
|
|
84
90
|
name: 'add',
|
|
85
91
|
position: position,
|
|
86
|
-
type: NodeType.BINARY,
|
|
92
|
+
type: graph_types_1.NodeType.BINARY,
|
|
87
93
|
engine: false,
|
|
88
94
|
stage: undefined,
|
|
89
95
|
config: {
|
|
@@ -103,13 +109,14 @@ export var addNode = function (id, position) { return ({
|
|
|
103
109
|
],
|
|
104
110
|
source: "a + b",
|
|
105
111
|
operator: '+',
|
|
106
|
-
sourceType: SourceType.EXPRESSION,
|
|
112
|
+
sourceType: code_nodes_1.SourceType.EXPRESSION,
|
|
107
113
|
biStage: true,
|
|
108
114
|
}); };
|
|
109
|
-
|
|
115
|
+
exports.addNode = addNode;
|
|
116
|
+
var multiplyNode = function (id, position) { return ({
|
|
110
117
|
id: id,
|
|
111
118
|
name: 'multiply',
|
|
112
|
-
type: NodeType.BINARY,
|
|
119
|
+
type: graph_types_1.NodeType.BINARY,
|
|
113
120
|
engine: false,
|
|
114
121
|
stage: undefined,
|
|
115
122
|
position: position,
|
|
@@ -130,6 +137,7 @@ export var multiplyNode = function (id, position) { return ({
|
|
|
130
137
|
],
|
|
131
138
|
source: "a * b",
|
|
132
139
|
operator: '*',
|
|
133
|
-
sourceType: SourceType.EXPRESSION,
|
|
140
|
+
sourceType: code_nodes_1.SourceType.EXPRESSION,
|
|
134
141
|
biStage: true,
|
|
135
142
|
}); };
|
|
143
|
+
exports.multiplyNode = multiplyNode;
|