@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.
@@ -1,25 +1,30 @@
1
- import util from 'util';
2
- import { parser } from '@shaderfrog/glsl-parser';
3
- import { generate } from '@shaderfrog/glsl-parser';
4
- import { addNode } from './graph-node';
5
- import { shaderSectionsToProgram, mergeShaderSections, findShaderSections, } from './shader-sections';
6
- import { numberNode } from './data-nodes';
7
- import { makeEdge } from './edge';
8
- import { evaluateNode } from './evaluate';
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var util_1 = __importDefault(require("util"));
7
+ var glsl_parser_1 = require("@shaderfrog/glsl-parser");
8
+ var glsl_parser_2 = require("@shaderfrog/glsl-parser");
9
+ var graph_node_1 = require("./graph-node");
10
+ var shader_sections_1 = require("./shader-sections");
11
+ var data_nodes_1 = require("./data-nodes");
12
+ var edge_1 = require("./edge");
13
+ var evaluate_1 = require("./evaluate");
9
14
  var inspect = function (thing) {
10
- return console.log(util.inspect(thing, false, null, true));
15
+ return console.log(util_1.default.inspect(thing, false, null, true));
11
16
  };
12
17
  var mergeBlocks = function (ast1, ast2) {
13
- var s1 = findShaderSections(ast1);
14
- var s2 = findShaderSections(ast2);
15
- var merged = mergeShaderSections(s1, s2);
16
- return generate(shaderSectionsToProgram(merged, {
18
+ var s1 = (0, shader_sections_1.findShaderSections)(ast1);
19
+ var s2 = (0, shader_sections_1.findShaderSections)(ast2);
20
+ var merged = (0, shader_sections_1.mergeShaderSections)(s1, s2);
21
+ return (0, glsl_parser_2.generate)((0, shader_sections_1.shaderSectionsToProgram)(merged, {
17
22
  includePrecisions: true,
18
23
  includeVersion: true,
19
24
  }));
20
25
  };
21
26
  var dedupe = function (code) {
22
- return generate(shaderSectionsToProgram(findShaderSections(parser.parse(code)), {
27
+ return (0, glsl_parser_2.generate)((0, shader_sections_1.shaderSectionsToProgram)((0, shader_sections_1.findShaderSections)(glsl_parser_1.parser.parse(code)), {
23
28
  includePrecisions: true,
24
29
  includeVersion: true,
25
30
  }));
@@ -121,47 +126,47 @@ var engine = {
121
126
  // });
122
127
  describe('evaluateNode()', function () {
123
128
  it('evaluates binary nodes', function () {
124
- var finalAdd = addNode(id(), p);
125
- var add2 = addNode(id(), p);
126
- var num1 = numberNode(id(), 'number', p, '3');
127
- var num2 = numberNode(id(), 'number', p, '5');
128
- var num3 = numberNode(id(), 'number', p, '7');
129
+ var finalAdd = (0, graph_node_1.addNode)(id(), p);
130
+ var add2 = (0, graph_node_1.addNode)(id(), p);
131
+ var num1 = (0, data_nodes_1.numberNode)(id(), 'number', p, '3');
132
+ var num2 = (0, data_nodes_1.numberNode)(id(), 'number', p, '5');
133
+ var num3 = (0, data_nodes_1.numberNode)(id(), 'number', p, '7');
129
134
  var graph = {
130
135
  nodes: [num1, num2, num3, finalAdd, add2],
131
136
  edges: [
132
- makeEdge(id(), num1.id, finalAdd.id, 'out', 'a'),
133
- makeEdge(id(), add2.id, finalAdd.id, 'out', 'b'),
134
- makeEdge(id(), num2.id, add2.id, 'out', 'a'),
135
- makeEdge(id(), num3.id, add2.id, 'out', 'b'),
137
+ (0, edge_1.makeEdge)(id(), num1.id, finalAdd.id, 'out', 'a'),
138
+ (0, edge_1.makeEdge)(id(), add2.id, finalAdd.id, 'out', 'b'),
139
+ (0, edge_1.makeEdge)(id(), num2.id, add2.id, 'out', 'a'),
140
+ (0, edge_1.makeEdge)(id(), num3.id, add2.id, 'out', 'b'),
136
141
  ],
137
142
  };
138
- expect(evaluateNode(engine, graph, finalAdd)).toBe(15);
143
+ expect((0, evaluate_1.evaluateNode)(engine, graph, finalAdd)).toBe(15);
139
144
  });
140
145
  });
141
146
  it('should merge uniforms with interface blocks', function () {
142
- var astX = parser.parse("uniform vec2 x;");
143
- var astY = parser.parse("uniform vec2 y, z;\nuniform vec3 a;");
147
+ var astX = glsl_parser_1.parser.parse("uniform vec2 x;");
148
+ var astY = glsl_parser_1.parser.parse("uniform vec2 y, z;\nuniform vec3 a;");
144
149
  expect(mergeBlocks(astX, astY)).toEqual("uniform vec2 x, y, z;\nuniform vec3 a;\n");
145
- var astL01 = parser.parse("uniform Light0 { vec4 y; } x;", { quiet: true });
146
- var astL02 = parser.parse("uniform Light0 { vec4 y; } x;", { quiet: true });
150
+ var astL01 = glsl_parser_1.parser.parse("uniform Light0 { vec4 y; } x;", { quiet: true });
151
+ var astL02 = glsl_parser_1.parser.parse("uniform Light0 { vec4 y; } x;", { quiet: true });
147
152
  expect(mergeBlocks(astL01, astL02)).toEqual("uniform Light0 { vec4 y; } x;\n");
148
- var astL001 = parser.parse("uniform Light0 { vec4 y; } x;", {
153
+ var astL001 = glsl_parser_1.parser.parse("uniform Light0 { vec4 y; } x;", {
149
154
  quiet: true,
150
155
  });
151
- var astL002 = parser.parse("uniform Light0 x;", { quiet: true });
156
+ var astL002 = glsl_parser_1.parser.parse("uniform Light0 x;", { quiet: true });
152
157
  expect(mergeBlocks(astL001, astL002)).toEqual("uniform Light0 { vec4 y; } x;\n");
153
- var astLo01 = parser.parse("uniform Light0 x;", { quiet: true });
154
- var astLo02 = parser.parse("uniform Light0 { vec4 y; } x;", {
158
+ var astLo01 = glsl_parser_1.parser.parse("uniform Light0 x;", { quiet: true });
159
+ var astLo02 = glsl_parser_1.parser.parse("uniform Light0 { vec4 y; } x;", {
155
160
  quiet: true,
156
161
  });
157
162
  expect(mergeBlocks(astLo01, astLo02)).toEqual("uniform Light0 { vec4 y; } x;\n");
158
163
  // This may be a bug, look at how the uniforms are merged. I at least want to
159
164
  // note its current behavior in this test
160
- var vec2Arr1 = parser.parse("uniform vec2 y[5];");
161
- var vec2Arr2 = parser.parse("uniform vec2 y[10];");
165
+ var vec2Arr1 = glsl_parser_1.parser.parse("uniform vec2 y[5];");
166
+ var vec2Arr2 = glsl_parser_1.parser.parse("uniform vec2 y[10];");
162
167
  expect(mergeBlocks(vec2Arr1, vec2Arr2)).toEqual("uniform vec2 y[10];\n");
163
- var block1 = parser.parse("uniform Scene { mat4 view; };");
164
- var block2 = parser.parse("uniform Scene { mat4 view; };");
168
+ var block1 = glsl_parser_1.parser.parse("uniform Scene { mat4 view; };");
169
+ var block2 = glsl_parser_1.parser.parse("uniform Scene { mat4 view; };");
165
170
  expect(mergeBlocks(block1, block2)).toEqual("uniform Scene { mat4 view; };\n");
166
171
  // Verify these lines are preserved (they go through dedupeUniforms)
167
172
  expect(dedupe("layout(std140,column_major) uniform;")).toEqual("layout(std140,column_major) uniform;");
package/graph/index.js CHANGED
@@ -1,11 +1,27 @@
1
- export * from './base-node';
2
- export * from './data-nodes';
3
- export * from './graph-node';
4
- export * from './code-nodes';
5
- export * from './edge';
6
- export * from './parsers';
7
- export * from './context';
8
- export * from './evaluate';
9
- export * from './graph-types';
10
- export * from './graph';
11
- export * from './shader-sections';
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./base-node"), exports);
18
+ __exportStar(require("./data-nodes"), exports);
19
+ __exportStar(require("./graph-node"), exports);
20
+ __exportStar(require("./code-nodes"), exports);
21
+ __exportStar(require("./edge"), exports);
22
+ __exportStar(require("./parsers"), exports);
23
+ __exportStar(require("./context"), exports);
24
+ __exportStar(require("./evaluate"), exports);
25
+ __exportStar(require("./graph-types"), exports);
26
+ __exportStar(require("./graph"), exports);
27
+ __exportStar(require("./shader-sections"), exports);
package/graph/parsers.js CHANGED
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __read = (this && this.__read) || function (o, n) {
2
3
  var m = typeof Symbol === "function" && o[Symbol.iterator];
3
4
  if (!m) return o;
@@ -23,17 +24,22 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
23
24
  }
24
25
  return to.concat(ar || Array.prototype.slice.call(from));
25
26
  };
27
+ var __importDefault = (this && this.__importDefault) || function (mod) {
28
+ return (mod && mod.__esModule) ? mod : { "default": mod };
29
+ };
26
30
  var _a;
27
- import { generate, parser } from '@shaderfrog/glsl-parser';
28
- import { visit, } from '@shaderfrog/glsl-parser/ast';
29
- import preprocess from '@shaderfrog/glsl-parser/preprocessor';
30
- import { convert300MainToReturn, from2To3, makeExpression, makeExpressionWithScopes, makeFnBodyStatementWithScopes, makeFnStatement, } from '../util/ast';
31
- import { applyStrategy } from '../strategy';
32
- import { SourceType } from './code-nodes';
33
- import { nodeInput } from './base-node';
34
- import { MAGIC_OUTPUT_STMTS, NodeType } from './graph-types';
35
- import { nodeName } from './graph';
36
- import { generateFiller } from '../util/ast';
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.coreParsers = exports.alphabet = void 0;
33
+ var glsl_parser_1 = require("@shaderfrog/glsl-parser");
34
+ var ast_1 = require("@shaderfrog/glsl-parser/ast");
35
+ var preprocessor_1 = __importDefault(require("@shaderfrog/glsl-parser/preprocessor"));
36
+ var ast_2 = require("../util/ast");
37
+ var strategy_1 = require("../strategy");
38
+ var code_nodes_1 = require("./code-nodes");
39
+ var base_node_1 = require("./base-node");
40
+ var graph_types_1 = require("./graph-types");
41
+ var graph_1 = require("./graph");
42
+ var ast_3 = require("../util/ast");
37
43
  /*
38
44
  * Core graph parsers, which is the plumbing/interface the graph and context
39
45
  * calls into, to parse, find inputs, etc, and define this per-node type.
@@ -46,19 +52,19 @@ var log = function () {
46
52
  }
47
53
  return (_a = console.log).call.apply(_a, __spreadArray([console, '\x1b[31m(core.parsers)\x1b[0m'], __read(args), false));
48
54
  };
49
- export var alphabet = 'abcdefghijklmnopqrstuvwxyz';
50
- export var coreParsers = (_a = {},
51
- _a[NodeType.SOURCE] = {
55
+ exports.alphabet = 'abcdefghijklmnopqrstuvwxyz';
56
+ exports.coreParsers = (_a = {},
57
+ _a[graph_types_1.NodeType.SOURCE] = {
52
58
  produceAst: function (engineContext, engine, graph, node, inputEdges) {
53
59
  var ast;
54
60
  // @ts-ignore
55
61
  if (node.expressionOnly) {
56
- node.sourceType = SourceType.EXPRESSION;
62
+ node.sourceType = code_nodes_1.SourceType.EXPRESSION;
57
63
  // @ts-ignore
58
64
  delete node.expressionOnly;
59
65
  }
60
- if (node.sourceType === SourceType.FN_BODY_FRAGMENT) {
61
- var _a = makeFnBodyStatementWithScopes(node.source), statements = _a.statements, scope = _a.scope;
66
+ if (node.sourceType === code_nodes_1.SourceType.FN_BODY_FRAGMENT) {
67
+ var _a = (0, ast_2.makeFnBodyStatementWithScopes)(node.source), statements = _a.statements, scope = _a.scope;
62
68
  ast = {
63
69
  type: 'program',
64
70
  scopes: [scope],
@@ -66,8 +72,8 @@ export var coreParsers = (_a = {},
66
72
  program: statements,
67
73
  };
68
74
  }
69
- else if (node.sourceType === SourceType.EXPRESSION) {
70
- var _b = makeExpressionWithScopes(node.source), expression = _b.expression, scope = _b.scope;
75
+ else if (node.sourceType === code_nodes_1.SourceType.EXPRESSION) {
76
+ var _b = (0, ast_2.makeExpressionWithScopes)(node.source), expression = _b.expression, scope = _b.scope;
71
77
  ast = {
72
78
  type: 'program',
73
79
  scopes: [scope],
@@ -78,22 +84,22 @@ export var coreParsers = (_a = {},
78
84
  else {
79
85
  var preprocessed = node.config.preprocess === false
80
86
  ? node.source
81
- : preprocess(node.source, {
87
+ : (0, preprocessor_1.default)(node.source, {
82
88
  preserve: {
83
89
  version: function () { return true; },
84
90
  },
85
91
  });
86
- ast = parser.parse(preprocessed);
92
+ ast = glsl_parser_1.parser.parse(preprocessed);
87
93
  if (node.config.version === 2 && node.stage) {
88
- from2To3(ast, node.stage);
94
+ (0, ast_2.from2To3)(ast, node.stage);
89
95
  log('converted ', node, 'to version 3', {
90
- code: generate(ast),
96
+ code: (0, glsl_parser_1.generate)(ast),
91
97
  });
92
98
  }
93
99
  // This assumes that expressionOnly nodes don't have a stage and that all
94
100
  // fragment source code shades have main function, which is probably wrong
95
101
  if (node.stage === 'fragment') {
96
- convert300MainToReturn(node.id, ast);
102
+ (0, ast_2.convert300MainToReturn)(node.id, ast);
97
103
  }
98
104
  }
99
105
  return ast;
@@ -101,7 +107,7 @@ export var coreParsers = (_a = {},
101
107
  findInputs: function (engineContext, ast, edges, node, sibling) {
102
108
  var seen = new Set();
103
109
  return node.config.strategies
104
- .flatMap(function (strategy) { return applyStrategy(strategy, ast, node, sibling); })
110
+ .flatMap(function (strategy) { return (0, strategy_1.applyStrategy)(strategy, ast, node, sibling); })
105
111
  .filter(function (_a) {
106
112
  var _b = __read(_a, 2), input = _b[0], _ = _b[1];
107
113
  if (!seen.has(input.id)) {
@@ -112,44 +118,44 @@ export var coreParsers = (_a = {},
112
118
  });
113
119
  },
114
120
  produceFiller: function (node, ast) {
115
- return node.sourceType === SourceType.EXPRESSION
121
+ return node.sourceType === code_nodes_1.SourceType.EXPRESSION
116
122
  ? ast.program[0]
117
- : node.sourceType === SourceType.FN_BODY_FRAGMENT
123
+ : node.sourceType === code_nodes_1.SourceType.FN_BODY_FRAGMENT
118
124
  ? ast.program
119
- : makeExpression("".concat(nodeName(node), "()"));
125
+ : (0, ast_2.makeExpression)("".concat((0, graph_1.nodeName)(node), "()"));
120
126
  },
121
127
  },
122
128
  // TODO: Output node assumes strategies are still passed in on node creation,
123
129
  // which might be a little awkward for graph creators?
124
- _a[NodeType.OUTPUT] = {
130
+ _a[graph_types_1.NodeType.OUTPUT] = {
125
131
  produceAst: function (engineContext, engine, graph, node, inputEdges) {
126
- return parser.parse(node.source);
132
+ return glsl_parser_1.parser.parse(node.source);
127
133
  },
128
134
  findInputs: function (engineContext, ast, edges, node, sibling) {
129
135
  return __spreadArray(__spreadArray([], __read(node.config.strategies.flatMap(function (strategy) {
130
- return applyStrategy(strategy, ast, node, sibling);
136
+ return (0, strategy_1.applyStrategy)(strategy, ast, node, sibling);
131
137
  })), false), [
132
138
  [
133
- nodeInput(MAGIC_OUTPUT_STMTS, "filler_".concat(MAGIC_OUTPUT_STMTS), 'filler', 'rgba', ['code'], false),
139
+ (0, base_node_1.nodeInput)(graph_types_1.MAGIC_OUTPUT_STMTS, "filler_".concat(graph_types_1.MAGIC_OUTPUT_STMTS), 'filler', 'rgba', ['code'], false),
134
140
  function (fillerAst) {
135
141
  var fn = ast.program.find(function (stmt) { return stmt.type === 'function'; });
136
- fn === null || fn === void 0 ? void 0 : fn.body.statements.unshift(makeFnStatement(generateFiller(fillerAst)));
142
+ fn === null || fn === void 0 ? void 0 : fn.body.statements.unshift((0, ast_2.makeFnStatement)((0, ast_3.generateFiller)(fillerAst)));
137
143
  return ast;
138
144
  },
139
145
  ],
140
146
  ], false);
141
147
  },
142
148
  produceFiller: function (node, ast) {
143
- return makeExpression('impossible_call()');
149
+ return (0, ast_2.makeExpression)('impossible_call()');
144
150
  },
145
151
  },
146
- _a[NodeType.BINARY] = {
152
+ _a[graph_types_1.NodeType.BINARY] = {
147
153
  produceAst: function (engineContext, engine, graph, iNode, inputEdges) {
148
154
  var node = iNode;
149
- return makeExpression('(' +
155
+ return (0, ast_2.makeExpression)('(' +
150
156
  (inputEdges.length
151
157
  ? inputEdges
152
- .map(function (_, index) { return alphabet.charAt(index); })
158
+ .map(function (_, index) { return exports.alphabet.charAt(index); })
153
159
  .join(" ".concat(node.operator, " "))
154
160
  : "a ".concat(node.operator, " b")) +
155
161
  ')');
@@ -158,9 +164,9 @@ export var coreParsers = (_a = {},
158
164
  return new Array(Math.max(inputEdges.length + 1, 2))
159
165
  .fill(0)
160
166
  .map(function (_, index) {
161
- var letter = alphabet.charAt(index);
167
+ var letter = exports.alphabet.charAt(index);
162
168
  return [
163
- nodeInput(letter, letter, 'filler', undefined, ['data', 'code'], false),
169
+ (0, base_node_1.nodeInput)(letter, letter, 'filler', undefined, ['data', 'code'], false),
164
170
  function (fillerAst) {
165
171
  var foundPath;
166
172
  var visitors = {
@@ -172,7 +178,7 @@ export var coreParsers = (_a = {},
172
178
  },
173
179
  },
174
180
  };
175
- visit(ast, visitors);
181
+ (0, ast_1.visit)(ast, visitors);
176
182
  if (!foundPath) {
177
183
  throw new Error("Im drunk and I think this case is impossible, no \"".concat(letter, "\" found in binary node?"));
178
184
  }
@@ -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,9 +35,11 @@ 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
- import { generate } from '@shaderfrog/glsl-parser';
38
- import { makeStatement } from '../util/ast';
39
- export var emptyShaderSections = function () { return ({
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.findShaderSections = exports.shaderSectionsToProgram = exports.mergeShaderSections = exports.dedupeUniforms = exports.dedupeQualifiedStatements = exports.highestPrecisions = exports.dedupeVersions = exports.higherPrecision = exports.emptyShaderSections = void 0;
40
+ var glsl_parser_1 = require("@shaderfrog/glsl-parser");
41
+ var ast_1 = require("../util/ast");
42
+ var emptyShaderSections = function () { return ({
40
43
  precision: [],
41
44
  preprocessor: [],
42
45
  version: [],
@@ -46,26 +49,30 @@ export var emptyShaderSections = function () { return ({
46
49
  outStatements: [],
47
50
  uniforms: [],
48
51
  }); };
52
+ exports.emptyShaderSections = emptyShaderSections;
49
53
  var Precision;
50
54
  (function (Precision) {
51
55
  Precision[Precision["highp"] = 2] = "highp";
52
56
  Precision[Precision["mediump"] = 1] = "mediump";
53
57
  Precision[Precision["lowp"] = 0] = "lowp";
54
58
  })(Precision || (Precision = {}));
55
- export var higherPrecision = function (p1, p2) {
59
+ var higherPrecision = function (p1, p2) {
56
60
  return Precision[p1] > Precision[p2] ? p1 : p2;
57
61
  };
58
- export var dedupeVersions = function (nodes) { return nodes[0]; };
59
- export var highestPrecisions = function (nodes) {
62
+ exports.higherPrecision = higherPrecision;
63
+ var dedupeVersions = function (nodes) { return nodes[0]; };
64
+ exports.dedupeVersions = dedupeVersions;
65
+ var highestPrecisions = function (nodes) {
60
66
  return Object.entries(nodes.reduce(function (precisions, stmt) {
61
67
  var _a;
62
- return (__assign(__assign({}, precisions), (_a = {}, _a[stmt.declaration.specifier.specifier.token] = higherPrecision(precisions[stmt.declaration.specifier.specifier.token], stmt.declaration.qualifier.token), _a)));
68
+ return (__assign(__assign({}, precisions), (_a = {}, _a[stmt.declaration.specifier.specifier.token] = (0, exports.higherPrecision)(precisions[stmt.declaration.specifier.specifier.token], stmt.declaration.qualifier.token), _a)));
63
69
  }, {})).map(function (_a) {
64
70
  var _b = __read(_a, 2), typeName = _b[0], precision = _b[1];
65
- return makeStatement("precision ".concat(precision, " ").concat(typeName));
71
+ return (0, ast_1.makeStatement)("precision ".concat(precision, " ").concat(typeName));
66
72
  });
67
73
  };
68
- export var dedupeQualifiedStatements = function (statements, qualifier) {
74
+ exports.highestPrecisions = highestPrecisions;
75
+ var dedupeQualifiedStatements = function (statements, qualifier) {
69
76
  return Object.entries(statements.reduce(function (stmts, stmt) {
70
77
  var _a;
71
78
  return (__assign(__assign({}, stmts), (_a = {}, _a[stmt.declaration.specified_type.specifier.specifier.token] = __assign(__assign({}, (stmts[stmt.declaration.specified_type.specifier.specifier.token] || {})), stmt.declaration.declarations.reduce(function (types, decl) {
@@ -74,9 +81,10 @@ export var dedupeQualifiedStatements = function (statements, qualifier) {
74
81
  }, {})), _a)));
75
82
  }, {})).map(function (_a) {
76
83
  var _b = __read(_a, 2), type = _b[0], varNames = _b[1];
77
- return makeStatement("".concat(qualifier, " ").concat(type, " ").concat(Object.keys(varNames).join(', ')));
84
+ return (0, ast_1.makeStatement)("".concat(qualifier, " ").concat(type, " ").concat(Object.keys(varNames).join(', ')));
78
85
  });
79
86
  };
87
+ exports.dedupeQualifiedStatements = dedupeQualifiedStatements;
80
88
  /**
81
89
  * Merge uniforms together into lists of identifiers under the same type.
82
90
  * There's special case handling for mixing of uniforms with "interface blocks"
@@ -86,7 +94,7 @@ export var dedupeQualifiedStatements = function (statements, qualifier) {
86
94
  * This function consumes uniforms as found by findShaderSections, so the
87
95
  * definitions must line up
88
96
  */
89
- export var dedupeUniforms = function (statements) {
97
+ var dedupeUniforms = function (statements) {
90
98
  var groupedByTypeName = Object.entries(statements.reduce(function (stmts, stmt) {
91
99
  var _a, _b, _c;
92
100
  var _d;
@@ -116,7 +124,7 @@ export var dedupeUniforms = function (statements) {
116
124
  if (decl.quantifier) {
117
125
  if (!('token' in decl.quantifier[0].expression)) {
118
126
  console.error('Unknown expression in quantifier: ', decl);
119
- throw new Error("Unknown expression in quantifier: ".concat(generate(decl)));
127
+ throw new Error("Unknown expression in quantifier: ".concat((0, glsl_parser_1.generate)(decl)));
120
128
  }
121
129
  quantifier = "[".concat(decl.quantifier[0].expression.token, "]");
122
130
  }
@@ -151,24 +159,25 @@ export var dedupeUniforms = function (statements) {
151
159
  };
152
160
  return __assign(__assign({}, stmts), (_b = {}, _b[interface_type.identifier] = (_c = {},
153
161
  _c[interfaceDeclaredUniform] = {
154
- generated: "".concat(generate(node)).concat(interfaceDeclaredUniform),
162
+ generated: "".concat((0, glsl_parser_1.generate)(node)).concat(interfaceDeclaredUniform),
155
163
  hasInterface: true,
156
164
  },
157
165
  _c), _b));
158
166
  }
159
167
  else {
160
- console.error('Unknown uniform AST', { stmt: stmt, code: generate(stmt) });
168
+ console.error('Unknown uniform AST', { stmt: stmt, code: (0, glsl_parser_1.generate)(stmt) });
161
169
  throw new Error('Unknown uniform AST encountered when merging uniforms');
162
170
  }
163
171
  }, {}));
164
172
  return groupedByTypeName.map(function (_a) {
165
173
  var _b = __read(_a, 2), type = _b[0], variables = _b[1];
166
- return makeStatement("uniform ".concat(type, " ").concat(Object.values(variables)
174
+ return (0, ast_1.makeStatement)("uniform ".concat(type, " ").concat(Object.values(variables)
167
175
  .map(function (v) { return v.generated; })
168
176
  .join(', ')));
169
177
  });
170
178
  };
171
- export var mergeShaderSections = function (s1, s2) {
179
+ exports.dedupeUniforms = dedupeUniforms;
180
+ var mergeShaderSections = function (s1, s2) {
172
181
  return {
173
182
  version: __spreadArray(__spreadArray([], __read(s1.version), false), __read(s2.version), false),
174
183
  precision: __spreadArray(__spreadArray([], __read(s1.precision), false), __read(s2.precision), false),
@@ -180,18 +189,20 @@ export var mergeShaderSections = function (s1, s2) {
180
189
  program: __spreadArray(__spreadArray([], __read(s1.program), false), __read(s2.program), false),
181
190
  };
182
191
  };
183
- export var shaderSectionsToProgram = function (sections, mergeOptions) { return ({
192
+ exports.mergeShaderSections = mergeShaderSections;
193
+ var shaderSectionsToProgram = function (sections, mergeOptions) { return ({
184
194
  type: 'program',
185
195
  scopes: [],
186
- program: __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read((mergeOptions.includeVersion ? [dedupeVersions(sections.version)] : [])), false), __read((mergeOptions.includePrecisions
187
- ? highestPrecisions(sections.precision)
188
- : [])), false), __read(sections.preprocessor), false), __read(sections.structs), false), __read(dedupeQualifiedStatements(sections.inStatements, 'in')), false), __read(dedupeQualifiedStatements(sections.outStatements, 'out')), false), __read(dedupeUniforms(sections.uniforms)), false), __read(sections.program), false),
196
+ program: __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read((mergeOptions.includeVersion ? [(0, exports.dedupeVersions)(sections.version)] : [])), false), __read((mergeOptions.includePrecisions
197
+ ? (0, exports.highestPrecisions)(sections.precision)
198
+ : [])), false), __read(sections.preprocessor), false), __read(sections.structs), false), __read((0, exports.dedupeQualifiedStatements)(sections.inStatements, 'in')), false), __read((0, exports.dedupeQualifiedStatements)(sections.outStatements, 'out')), false), __read((0, exports.dedupeUniforms)(sections.uniforms)), false), __read(sections.program), false),
189
199
  }); };
200
+ exports.shaderSectionsToProgram = shaderSectionsToProgram;
190
201
  /**
191
202
  * Group an AST into logical sections. The output of this funciton is consumed
192
203
  * by the dedupe methods, namely dedupeUniforms, so the data shapes are coupled
193
204
  */
194
- export var findShaderSections = function (ast) {
205
+ var findShaderSections = function (ast) {
195
206
  var initialValue = {
196
207
  precision: [],
197
208
  preprocessor: [],
@@ -237,9 +248,9 @@ export var findShaderSections = function (ast) {
237
248
  else if (node.type === 'declaration_statement' &&
238
249
  'specified_type' in node.declaration &&
239
250
  ((_m = (_l = (_k = node.declaration) === null || _k === void 0 ? void 0 : _k.specified_type) === null || _l === void 0 ? void 0 : _l.qualifiers) === null || _m === void 0 ? void 0 : _m.find(function (n) { return 'token' in n && n.token === 'in'; }))) {
240
- if (generate(node).includes('main_Fireball')) {
241
- console.log('findShaderSections\n', generate(ast));
242
- console.log("Tracking inStatement \"".concat(generate(node), "\""), node);
251
+ if ((0, glsl_parser_1.generate)(node).includes('main_Fireball')) {
252
+ console.log('findShaderSections\n', (0, glsl_parser_1.generate)(ast));
253
+ console.log("Tracking inStatement \"".concat((0, glsl_parser_1.generate)(node), "\""), node);
243
254
  debugger;
244
255
  }
245
256
  return __assign(__assign({}, sections), { inStatements: sections.inStatements.concat(node) });
@@ -254,3 +265,4 @@ export var findShaderSections = function (ast) {
254
265
  }
255
266
  }, initialValue);
256
267
  };
268
+ exports.findShaderSections = findShaderSections;
package/index.js CHANGED
@@ -1,3 +1,19 @@
1
- export * from './graph';
2
- export * from './strategy';
3
- export * from './engine';
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./graph"), exports);
18
+ __exportStar(require("./strategy"), exports);
19
+ __exportStar(require("./engine"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shaderfrog/core",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "description": "Shaderfrog core",
5
5
  "scripts": {
6
6
  "prepare": "npm run build && ./prepublish.sh",