@luma.gl/engine 9.0.0-alpha.14 → 9.0.0-alpha.16
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/dist/animation/key-frames.d.ts +1 -1
- package/dist/animation/key-frames.d.ts.map +1 -1
- package/dist/animation/key-frames.js +51 -72
- package/dist/animation/timeline.d.ts +4 -4
- package/dist/animation/timeline.d.ts.map +1 -1
- package/dist/animation/timeline.js +94 -131
- package/dist/animation-loop/animation-loop.d.ts +2 -3
- package/dist/animation-loop/animation-loop.d.ts.map +1 -1
- package/dist/animation-loop/animation-loop.js +414 -473
- package/dist/animation-loop/animation-props.d.ts +1 -2
- package/dist/animation-loop/animation-props.d.ts.map +1 -1
- package/dist/animation-loop/animation-props.js +0 -1
- package/dist/animation-loop/make-animation-loop.d.ts +1 -1
- package/dist/animation-loop/make-animation-loop.d.ts.map +1 -1
- package/dist/animation-loop/make-animation-loop.js +26 -31
- package/dist/animation-loop/render-loop.js +17 -7
- package/dist/bundle.js +2 -2
- package/dist/dist.min.js +31 -0
- package/dist/es5/animation/key-frames.js +84 -0
- package/dist/es5/animation/key-frames.js.map +1 -0
- package/dist/es5/animation/timeline.js +183 -0
- package/dist/es5/animation/timeline.js.map +1 -0
- package/dist/es5/animation-loop/animation-loop.js +534 -0
- package/dist/es5/animation-loop/animation-loop.js.map +1 -0
- package/dist/es5/animation-loop/animation-props.js +2 -0
- package/dist/es5/animation-loop/animation-props.js.map +1 -0
- package/dist/es5/animation-loop/make-animation-loop.js +53 -0
- package/dist/es5/animation-loop/make-animation-loop.js.map +1 -0
- package/dist/es5/animation-loop/render-loop.js +39 -0
- package/dist/es5/animation-loop/render-loop.js.map +1 -0
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/geometries/cone-geometry.js +43 -0
- package/dist/es5/geometries/cone-geometry.js.map +1 -0
- package/dist/es5/geometries/cube-geometry.js +84 -0
- package/dist/es5/geometries/cube-geometry.js.map +1 -0
- package/dist/es5/geometries/cylinder-geometry.js +39 -0
- package/dist/es5/geometries/cylinder-geometry.js.map +1 -0
- package/dist/es5/geometries/ico-sphere-geometry.js +185 -0
- package/dist/es5/geometries/ico-sphere-geometry.js.map +1 -0
- package/dist/es5/geometries/plane-geometry.js +137 -0
- package/dist/es5/geometries/plane-geometry.js.map +1 -0
- package/dist/es5/geometries/sphere-geometry.js +120 -0
- package/dist/es5/geometries/sphere-geometry.js.map +1 -0
- package/dist/es5/geometries/truncated-cone-geometry.js +160 -0
- package/dist/es5/geometries/truncated-cone-geometry.js.map +1 -0
- package/dist/es5/geometry/geometry-table.js +2 -0
- package/dist/es5/geometry/geometry-table.js.map +1 -0
- package/dist/es5/geometry/geometry-utils.js +39 -0
- package/dist/es5/geometry/geometry-utils.js.map +1 -0
- package/dist/es5/geometry/geometry.js +150 -0
- package/dist/es5/geometry/geometry.js.map +1 -0
- package/dist/es5/geometry/primitive-utils.js +2 -0
- package/dist/es5/geometry/primitive-utils.js.map +1 -0
- package/dist/es5/index.js +112 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/lib/clip-space.js +2 -0
- package/dist/es5/lib/clip-space.js.map +1 -0
- package/dist/es5/lib/model-utils.js +52 -0
- package/dist/es5/lib/model-utils.js.map +1 -0
- package/dist/es5/lib/model.js +173 -0
- package/dist/es5/lib/model.js.map +1 -0
- package/dist/es5/lib/pipeline-factory.js +244 -0
- package/dist/es5/lib/pipeline-factory.js.map +1 -0
- package/dist/esm/animation/key-frames.js +57 -0
- package/dist/esm/animation/key-frames.js.map +1 -0
- package/dist/esm/animation/timeline.js +113 -0
- package/dist/esm/animation/timeline.js.map +1 -0
- package/dist/esm/animation-loop/animation-loop.js +367 -0
- package/dist/esm/animation-loop/animation-loop.js.map +1 -0
- package/dist/esm/animation-loop/animation-props.js +2 -0
- package/dist/esm/animation-loop/animation-props.js.map +1 -0
- package/dist/esm/animation-loop/make-animation-loop.js +28 -0
- package/dist/esm/animation-loop/make-animation-loop.js.map +1 -0
- package/dist/esm/animation-loop/render-loop.js +7 -0
- package/dist/esm/animation-loop/render-loop.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/geometries/cone-geometry.js +21 -0
- package/dist/esm/geometries/cone-geometry.js.map +1 -0
- package/dist/esm/geometries/cube-geometry.js +67 -0
- package/dist/esm/geometries/cube-geometry.js.map +1 -0
- package/dist/esm/geometries/cylinder-geometry.js +18 -0
- package/dist/esm/geometries/cylinder-geometry.js.map +1 -0
- package/dist/esm/geometries/ico-sphere-geometry.js +170 -0
- package/dist/esm/geometries/ico-sphere-geometry.js.map +1 -0
- package/dist/esm/geometries/plane-geometry.js +119 -0
- package/dist/esm/geometries/plane-geometry.js.map +1 -0
- package/dist/esm/geometries/sphere-geometry.js +102 -0
- package/dist/esm/geometries/sphere-geometry.js.map +1 -0
- package/dist/esm/geometries/truncated-cone-geometry.js +136 -0
- package/dist/esm/geometries/truncated-cone-geometry.js.map +1 -0
- package/dist/esm/geometry/geometry-table.js +2 -0
- package/dist/esm/geometry/geometry-table.js.map +1 -0
- package/dist/esm/geometry/geometry-utils.js +37 -0
- package/dist/esm/geometry/geometry-utils.js.map +1 -0
- package/dist/esm/geometry/geometry.js +119 -0
- package/dist/esm/geometry/geometry.js.map +1 -0
- package/dist/esm/geometry/primitive-utils.js +2 -0
- package/dist/esm/geometry/primitive-utils.js.map +1 -0
- package/dist/esm/index.js +16 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/clip-space.js +2 -0
- package/dist/esm/lib/clip-space.js.map +1 -0
- package/dist/esm/lib/model-utils.js +40 -0
- package/dist/esm/lib/model-utils.js.map +1 -0
- package/dist/esm/lib/model.js +146 -0
- package/dist/esm/lib/model.js.map +1 -0
- package/dist/esm/lib/pipeline-factory.js +180 -0
- package/dist/esm/lib/pipeline-factory.js.map +1 -0
- package/dist/geometries/cone-geometry.d.ts +1 -1
- package/dist/geometries/cone-geometry.d.ts.map +1 -1
- package/dist/geometries/cone-geometry.js +12 -17
- package/dist/geometries/cube-geometry.d.ts +1 -1
- package/dist/geometries/cube-geometry.d.ts.map +1 -1
- package/dist/geometries/cube-geometry.js +187 -56
- package/dist/geometries/cylinder-geometry.d.ts +1 -1
- package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
- package/dist/geometries/cylinder-geometry.js +10 -14
- package/dist/geometries/ico-sphere-geometry.d.ts +1 -1
- package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/ico-sphere-geometry.js +141 -170
- package/dist/geometries/plane-geometry.d.ts +1 -1
- package/dist/geometries/plane-geometry.d.ts.map +1 -1
- package/dist/geometries/plane-geometry.js +93 -121
- package/dist/geometries/sphere-geometry.d.ts +1 -1
- package/dist/geometries/sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/sphere-geometry.js +76 -100
- package/dist/geometries/truncated-cone-geometry.d.ts +1 -1
- package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
- package/dist/geometries/truncated-cone-geometry.js +104 -131
- package/dist/geometry/geometry-table.d.ts +1 -1
- package/dist/geometry/geometry-table.d.ts.map +1 -1
- package/dist/geometry/geometry-table.js +0 -1
- package/dist/geometry/geometry-utils.js +22 -41
- package/dist/geometry/geometry.d.ts +4 -4
- package/dist/geometry/geometry.d.ts.map +1 -1
- package/dist/geometry/geometry.js +96 -142
- package/dist/geometry/primitive-utils.js +30 -1
- package/dist/index.js +20 -16
- package/dist/lib/clip-space.js +50 -1
- package/dist/lib/model-utils.js +97 -29
- package/dist/lib/model.d.ts +1 -1
- package/dist/lib/model.d.ts.map +1 -1
- package/dist/lib/model.js +122 -166
- package/dist/lib/pipeline-factory.d.ts +3 -3
- package/dist/lib/pipeline-factory.d.ts.map +1 -1
- package/dist/lib/pipeline-factory.js +136 -204
- package/package.json +12 -11
- package/dist/animation/key-frames.js.map +0 -1
- package/dist/animation/timeline.js.map +0 -1
- package/dist/animation-loop/animation-loop.js.map +0 -1
- package/dist/animation-loop/animation-props.js.map +0 -1
- package/dist/animation-loop/make-animation-loop.js.map +0 -1
- package/dist/animation-loop/render-loop.js.map +0 -1
- package/dist/bundle.js.map +0 -1
- package/dist/geometries/cone-geometry.js.map +0 -1
- package/dist/geometries/cube-geometry.js.map +0 -1
- package/dist/geometries/cylinder-geometry.js.map +0 -1
- package/dist/geometries/ico-sphere-geometry.js.map +0 -1
- package/dist/geometries/plane-geometry.js.map +0 -1
- package/dist/geometries/sphere-geometry.js.map +0 -1
- package/dist/geometries/truncated-cone-geometry.js.map +0 -1
- package/dist/geometry/geometry-table.js.map +0 -1
- package/dist/geometry/geometry-utils.js.map +0 -1
- package/dist/geometry/geometry.js.map +0 -1
- package/dist/geometry/primitive-utils.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/clip-space.js.map +0 -1
- package/dist/lib/model-utils.js.map +0 -1
- package/dist/lib/model.js.map +0 -1
- package/dist/lib/pipeline-factory.js.map +0 -1
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.PipelineFactory = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
var _shadertools = require("@luma.gl/shadertools");
|
|
12
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
13
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
14
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
15
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
16
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
17
|
+
var DEFAULT_RENDER_PIPELINE_OPTIONS = {
|
|
18
|
+
vs: '',
|
|
19
|
+
fs: '',
|
|
20
|
+
modules: [],
|
|
21
|
+
defines: {},
|
|
22
|
+
inject: {},
|
|
23
|
+
transpileToGLSL100: false,
|
|
24
|
+
layout: null,
|
|
25
|
+
varyings: [],
|
|
26
|
+
bufferMode: 0x8c8d,
|
|
27
|
+
topology: 'triangle-list',
|
|
28
|
+
parameters: {}
|
|
29
|
+
};
|
|
30
|
+
var PipelineFactory = function () {
|
|
31
|
+
function PipelineFactory(device) {
|
|
32
|
+
(0, _classCallCheck2.default)(this, PipelineFactory);
|
|
33
|
+
(0, _defineProperty2.default)(this, "device", void 0);
|
|
34
|
+
(0, _defineProperty2.default)(this, "stateHash", 0);
|
|
35
|
+
(0, _defineProperty2.default)(this, "_hashCounter", 0);
|
|
36
|
+
(0, _defineProperty2.default)(this, "_hashes", {});
|
|
37
|
+
(0, _defineProperty2.default)(this, "_useCounts", {});
|
|
38
|
+
(0, _defineProperty2.default)(this, "_pipelineCache", {});
|
|
39
|
+
(0, _defineProperty2.default)(this, "_getUniforms", {});
|
|
40
|
+
(0, _defineProperty2.default)(this, "_hookFunctions", []);
|
|
41
|
+
(0, _defineProperty2.default)(this, "_defaultModules", []);
|
|
42
|
+
this.device = device;
|
|
43
|
+
}
|
|
44
|
+
(0, _createClass2.default)(PipelineFactory, [{
|
|
45
|
+
key: "addDefaultModule",
|
|
46
|
+
value: function addDefaultModule(module) {
|
|
47
|
+
if (!this._defaultModules.find(function (m) {
|
|
48
|
+
return m.name === (typeof module === 'string' ? module : module.name);
|
|
49
|
+
})) {
|
|
50
|
+
this._defaultModules.push(module);
|
|
51
|
+
}
|
|
52
|
+
this.stateHash++;
|
|
53
|
+
}
|
|
54
|
+
}, {
|
|
55
|
+
key: "removeDefaultModule",
|
|
56
|
+
value: function removeDefaultModule(module) {
|
|
57
|
+
var moduleName = typeof module === 'string' ? module : module.name;
|
|
58
|
+
this._defaultModules = this._defaultModules.filter(function (m) {
|
|
59
|
+
return m.name !== moduleName;
|
|
60
|
+
});
|
|
61
|
+
this.stateHash++;
|
|
62
|
+
}
|
|
63
|
+
}, {
|
|
64
|
+
key: "addShaderHook",
|
|
65
|
+
value: function addShaderHook(hook, opts) {
|
|
66
|
+
if (opts) {
|
|
67
|
+
hook = Object.assign(opts, {
|
|
68
|
+
hook: hook
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
this._hookFunctions.push(hook);
|
|
72
|
+
this.stateHash++;
|
|
73
|
+
}
|
|
74
|
+
}, {
|
|
75
|
+
key: "createRenderPipeline",
|
|
76
|
+
value: function createRenderPipeline(options) {
|
|
77
|
+
var props = _objectSpread(_objectSpread({}, DEFAULT_RENDER_PIPELINE_OPTIONS), options);
|
|
78
|
+
var modules = this._getModuleList(props.modules);
|
|
79
|
+
var hash = this._hashRenderPipeline(_objectSpread(_objectSpread({}, props), {}, {
|
|
80
|
+
modules: modules
|
|
81
|
+
}));
|
|
82
|
+
if (!this._pipelineCache[hash]) {
|
|
83
|
+
var _this$_createRenderPi = this._createRenderPipeline(_objectSpread(_objectSpread({}, props), {}, {
|
|
84
|
+
modules: modules
|
|
85
|
+
})),
|
|
86
|
+
pipeline = _this$_createRenderPi.pipeline,
|
|
87
|
+
getUniforms = _this$_createRenderPi.getUniforms;
|
|
88
|
+
pipeline.hash = hash;
|
|
89
|
+
this._pipelineCache[hash] = pipeline;
|
|
90
|
+
this._getUniforms[hash] = getUniforms || function (x) {
|
|
91
|
+
return {};
|
|
92
|
+
};
|
|
93
|
+
this._useCounts[hash] = 0;
|
|
94
|
+
}
|
|
95
|
+
this._useCounts[hash]++;
|
|
96
|
+
return {
|
|
97
|
+
pipeline: this._pipelineCache[hash],
|
|
98
|
+
getUniforms: this._getUniforms[hash]
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}, {
|
|
102
|
+
key: "release",
|
|
103
|
+
value: function release(pipeline) {
|
|
104
|
+
var hash = pipeline.hash;
|
|
105
|
+
this._useCounts[hash]--;
|
|
106
|
+
if (this._useCounts[hash] === 0) {
|
|
107
|
+
this._pipelineCache[hash].destroy();
|
|
108
|
+
delete this._pipelineCache[hash];
|
|
109
|
+
delete this._getUniforms[hash];
|
|
110
|
+
delete this._useCounts[hash];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}, {
|
|
114
|
+
key: "getUniforms",
|
|
115
|
+
value: function getUniforms(pipeline) {
|
|
116
|
+
return this._getUniforms[pipeline.hash] || null;
|
|
117
|
+
}
|
|
118
|
+
}, {
|
|
119
|
+
key: "_createRenderPipeline",
|
|
120
|
+
value: function _createRenderPipeline(props) {
|
|
121
|
+
var platformInfo = {
|
|
122
|
+
gpu: this.device.info.gpu,
|
|
123
|
+
features: this.device.features
|
|
124
|
+
};
|
|
125
|
+
if (!props.fs) {
|
|
126
|
+
throw new Error('fs');
|
|
127
|
+
}
|
|
128
|
+
var assembled = (0, _shadertools.assembleShaders)(platformInfo, _objectSpread(_objectSpread({}, props), {}, {
|
|
129
|
+
fs: props.fs,
|
|
130
|
+
hookFunctions: this._hookFunctions
|
|
131
|
+
}));
|
|
132
|
+
var pipeline = this.device.createRenderPipeline(_objectSpread(_objectSpread({}, props), {}, {
|
|
133
|
+
vs: this.device.createShader({
|
|
134
|
+
stage: 'vertex',
|
|
135
|
+
source: assembled.vs
|
|
136
|
+
}),
|
|
137
|
+
fs: assembled.fs ? this.device.createShader({
|
|
138
|
+
stage: 'fragment',
|
|
139
|
+
source: assembled.fs
|
|
140
|
+
}) : null
|
|
141
|
+
}));
|
|
142
|
+
return {
|
|
143
|
+
pipeline: pipeline,
|
|
144
|
+
getUniforms: assembled.getUniforms
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}, {
|
|
148
|
+
key: "_hashRenderPipeline",
|
|
149
|
+
value: function _hashRenderPipeline(props) {
|
|
150
|
+
var _this = this;
|
|
151
|
+
var _props$modules = props.modules,
|
|
152
|
+
modules = _props$modules === void 0 ? [] : _props$modules,
|
|
153
|
+
_props$varyings = props.varyings,
|
|
154
|
+
varyings = _props$varyings === void 0 ? [] : _props$varyings,
|
|
155
|
+
_props$defines = props.defines,
|
|
156
|
+
defines = _props$defines === void 0 ? {} : _props$defines,
|
|
157
|
+
_props$inject = props.inject,
|
|
158
|
+
inject = _props$inject === void 0 ? {} : _props$inject,
|
|
159
|
+
_props$parameters = props.parameters,
|
|
160
|
+
parameters = _props$parameters === void 0 ? {} : _props$parameters;
|
|
161
|
+
var vsHash = this._getHash(props.vs);
|
|
162
|
+
var fsHash = props.fs ? this._getHash(props.fs) : 0;
|
|
163
|
+
var moduleHashes = modules.map(function (m) {
|
|
164
|
+
return _this._getHash(typeof m === 'string' ? m : m.name);
|
|
165
|
+
}).sort();
|
|
166
|
+
var varyingHashes = varyings.map(function (v) {
|
|
167
|
+
return _this._getHash(v);
|
|
168
|
+
});
|
|
169
|
+
var defineKeys = Object.keys(defines).sort();
|
|
170
|
+
var injectKeys = Object.keys(inject).sort();
|
|
171
|
+
var defineHashes = [];
|
|
172
|
+
var injectHashes = [];
|
|
173
|
+
var _iterator = _createForOfIteratorHelper(defineKeys),
|
|
174
|
+
_step;
|
|
175
|
+
try {
|
|
176
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
177
|
+
var key = _step.value;
|
|
178
|
+
defineHashes.push(this._getHash(key));
|
|
179
|
+
defineHashes.push(this._getHash(String(defines[key])));
|
|
180
|
+
}
|
|
181
|
+
} catch (err) {
|
|
182
|
+
_iterator.e(err);
|
|
183
|
+
} finally {
|
|
184
|
+
_iterator.f();
|
|
185
|
+
}
|
|
186
|
+
var _iterator2 = _createForOfIteratorHelper(injectKeys),
|
|
187
|
+
_step2;
|
|
188
|
+
try {
|
|
189
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
190
|
+
var _key = _step2.value;
|
|
191
|
+
injectHashes.push(this._getHash(_key));
|
|
192
|
+
injectHashes.push(this._getHash(inject[_key]));
|
|
193
|
+
}
|
|
194
|
+
} catch (err) {
|
|
195
|
+
_iterator2.e(err);
|
|
196
|
+
} finally {
|
|
197
|
+
_iterator2.f();
|
|
198
|
+
}
|
|
199
|
+
var parameterHash = JSON.stringify(parameters);
|
|
200
|
+
return "".concat(vsHash, "/").concat(fsHash, "D").concat(defineHashes.join('/'), "M").concat(moduleHashes.join('/'), "I").concat(injectHashes.join('/'), "V").concat(varyingHashes.join('/'), "H").concat(this.stateHash, "B").concat(props.bufferMode).concat(props.transpileToGLSL100 ? 'T' : '', "P").concat(parameterHash);
|
|
201
|
+
}
|
|
202
|
+
}, {
|
|
203
|
+
key: "_getHash",
|
|
204
|
+
value: function _getHash(key) {
|
|
205
|
+
if (this._hashes[key] === undefined) {
|
|
206
|
+
this._hashes[key] = this._hashCounter++;
|
|
207
|
+
}
|
|
208
|
+
return this._hashes[key];
|
|
209
|
+
}
|
|
210
|
+
}, {
|
|
211
|
+
key: "_getModuleList",
|
|
212
|
+
value: function _getModuleList() {
|
|
213
|
+
var appModules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
214
|
+
var modules = new Array(this._defaultModules.length + appModules.length);
|
|
215
|
+
var seen = {};
|
|
216
|
+
var count = 0;
|
|
217
|
+
for (var i = 0, len = this._defaultModules.length; i < len; ++i) {
|
|
218
|
+
var module = this._defaultModules[i];
|
|
219
|
+
var name = module.name;
|
|
220
|
+
modules[count++] = module;
|
|
221
|
+
seen[name] = true;
|
|
222
|
+
}
|
|
223
|
+
for (var _i = 0, _len = appModules.length; _i < _len; ++_i) {
|
|
224
|
+
var _module = appModules[_i];
|
|
225
|
+
var _name = _module.name;
|
|
226
|
+
if (!seen[_name]) {
|
|
227
|
+
modules[count++] = _module;
|
|
228
|
+
seen[_name] = true;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
modules.length = count;
|
|
232
|
+
return modules;
|
|
233
|
+
}
|
|
234
|
+
}], [{
|
|
235
|
+
key: "getDefaultPipelineFactory",
|
|
236
|
+
value: function getDefaultPipelineFactory(device) {
|
|
237
|
+
device.defaultPipelineFactory = device.defaultPipelineFactory || new PipelineFactory(device);
|
|
238
|
+
return device.defaultPipelineFactory;
|
|
239
|
+
}
|
|
240
|
+
}]);
|
|
241
|
+
return PipelineFactory;
|
|
242
|
+
}();
|
|
243
|
+
exports.PipelineFactory = PipelineFactory;
|
|
244
|
+
//# sourceMappingURL=pipeline-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-factory.js","names":["_shadertools","require","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","arguments","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","DEFAULT_RENDER_PIPELINE_OPTIONS","vs","fs","modules","defines","inject","transpileToGLSL100","layout","varyings","bufferMode","topology","parameters","PipelineFactory","device","_classCallCheck2","_createClass2","addDefaultModule","module","_defaultModules","find","m","stateHash","removeDefaultModule","moduleName","addShaderHook","hook","opts","assign","_hookFunctions","createRenderPipeline","options","props","_getModuleList","hash","_hashRenderPipeline","_pipelineCache","_this$_createRenderPi","_createRenderPipeline","pipeline","getUniforms","_getUniforms","x","_useCounts","release","destroy","platformInfo","gpu","info","features","Error","assembled","assembleShaders","hookFunctions","createShader","stage","_this","_props$modules","_props$varyings","_props$defines","_props$inject","_props$parameters","vsHash","_getHash","fsHash","moduleHashes","map","sort","varyingHashes","v","defineKeys","injectKeys","defineHashes","injectHashes","_iterator","_step","String","_iterator2","_step2","parameterHash","JSON","stringify","concat","join","_hashes","undefined","_hashCounter","appModules","seen","count","getDefaultPipelineFactory","defaultPipelineFactory","exports"],"sources":["../../../src/lib/pipeline-factory.ts"],"sourcesContent":["import type {RenderPipelineParameters, PrimitiveTopology, ShaderLayout} from '@luma.gl/api';\nimport {Device, RenderPipeline} from '@luma.gl/api/';\nimport type { ShaderModule } from '@luma.gl/shadertools';\nimport {assembleShaders} from '@luma.gl/shadertools';\n\nexport type GetRenderPipelineOptions = {\n vs: string;\n fs: string | null;\n topology: PrimitiveTopology;\n layout?: ShaderLayout | null;\n parameters?: RenderPipelineParameters;\n\n modules?: ShaderModule[];\n defines?: Record<string, string | number | boolean>;\n inject?: Record<string, string>;\n transpileToGLSL100?: boolean;\n\n varyings?: string[];\n bufferMode?: number, \n};\n\nexport type GetComputePipelineOptions = {\n cs: string;\n parameters?: RenderPipelineParameters;\n\n modules?: ShaderModule[];\n defines?: Record<string, string>;\n inject?: Record<string, string>;\n transpileToGLSL100?: boolean;\n\n varyings?: string[];\n bufferMode?: number;\n};\n\nconst DEFAULT_RENDER_PIPELINE_OPTIONS: Required<GetRenderPipelineOptions> = {\n vs: '',\n fs: '',\n modules: [],\n defines: {},\n inject: {},\n transpileToGLSL100: false,\n layout: null,\n\n varyings: [],\n bufferMode: 0x8c8d, // // varyings/bufferMode for xform feedback, 0x8c8d: SEPARATE_ATTRIBS\n topology: 'triangle-list',\n parameters: {} \n};\n\ntype GetUniformsFunc = (props?: Record<string, any>) => Record<string, any>;\n\n/** Efficiently create shared pipelines with varying parameters */\nexport class PipelineFactory {\n readonly device: Device;\n\n stateHash: number = 0; // Used to change hashing if hooks are modified\n private _hashCounter: number = 0;\n private readonly _hashes: Record<string, number> = {};\n private readonly _useCounts: Record<string, number> = {};\n\n private readonly _pipelineCache: Record<string, RenderPipeline> = {};\n\n private readonly _getUniforms: Record<string, GetUniformsFunc> = {};\n private readonly _hookFunctions: any[] = [];\n private _defaultModules: any[] = [];\n // private readonly _registeredModules = {}; // TODO: Remove? This isn't used anywhere in luma.gl\n\n static getDefaultPipelineFactory(device: Device): PipelineFactory {\n // @ts-expect-error Add to device\n device.defaultPipelineFactory = device.defaultPipelineFactory || new PipelineFactory(device);\n // @ts-expect-error Add to device\n return device.defaultPipelineFactory;\n }\n\n constructor(device: Device) {\n this.device = device;\n }\n\n addDefaultModule(module: ShaderModule): void {\n if (!this._defaultModules.find((m) => m.name === (typeof module === 'string' ? module : module.name))) {\n this._defaultModules.push(module);\n }\n this.stateHash++;\n }\n\n removeDefaultModule(module: ShaderModule): void {\n const moduleName = typeof module === 'string' ? module : module.name;\n this._defaultModules = this._defaultModules.filter((m) => m.name !== moduleName);\n this.stateHash++;\n }\n\n addShaderHook(hook: string, opts?: any): void {\n if (opts) {\n hook = Object.assign(opts, {hook});\n }\n this._hookFunctions.push(hook);\n this.stateHash++;\n }\n\n createRenderPipeline(options: GetRenderPipelineOptions): {\n pipeline: RenderPipeline;\n getUniforms: GetUniformsFunc;\n } {\n const props: Required<GetRenderPipelineOptions> = {...DEFAULT_RENDER_PIPELINE_OPTIONS, ...options};\n\n const modules = this._getModuleList(props.modules); // Combine with default modules\n\n const hash = this._hashRenderPipeline({...props, modules});\n\n if (!this._pipelineCache[hash]) {\n const {pipeline, getUniforms} = this._createRenderPipeline({...props, modules});\n pipeline.hash = hash;\n this._pipelineCache[hash] = pipeline;\n this._getUniforms[hash] = getUniforms || ((x?: unknown) => ({}));\n this._useCounts[hash] = 0;\n }\n\n this._useCounts[hash]++;\n\n return {\n pipeline: this._pipelineCache[hash],\n getUniforms: this._getUniforms[hash]\n };\n }\n\n release(pipeline: RenderPipeline): void {\n const hash = pipeline.hash;\n this._useCounts[hash]--;\n if (this._useCounts[hash] === 0) {\n this._pipelineCache[hash].destroy();\n delete this._pipelineCache[hash];\n delete this._getUniforms[hash];\n delete this._useCounts[hash];\n }\n }\n\n getUniforms(pipeline: RenderPipeline) {\n return this._getUniforms[pipeline.hash] || null;\n }\n\n // PRIVATE\n\n _createRenderPipeline(props: GetRenderPipelineOptions): {\n pipeline: RenderPipeline,\n getUniforms: GetUniformsFunc\n } {\n const platformInfo = {\n gpu: this.device.info.gpu,\n features: this.device.features\n };\n\n if (!props.fs) {\n throw new Error('fs');\n }\n\n const assembled = assembleShaders(platformInfo, {...props, fs: props.fs, hookFunctions: this._hookFunctions});\n\n const pipeline = this.device.createRenderPipeline({\n ...props,\n vs: this.device.createShader({stage: 'vertex', source: assembled.vs}),\n fs: assembled.fs ? this.device.createShader({stage: 'fragment', source: assembled.fs}) : null,\n });\n\n return {pipeline, getUniforms: assembled.getUniforms};\n }\n\n /** Calculate a hash based on all the inputs for a render pipeline */\n _hashRenderPipeline(props: GetRenderPipelineOptions): string {\n const {modules = [], varyings = [], defines = {}, inject = {}, parameters = {}} = props;\n const vsHash = this._getHash(props.vs);\n const fsHash = props.fs ? this._getHash(props.fs) : 0;\n\n const moduleHashes = modules.map((m) => this._getHash(typeof m === 'string' ? m : m.name)).sort();\n const varyingHashes = varyings.map((v) => this._getHash(v));\n\n const defineKeys = Object.keys(defines).sort();\n const injectKeys = Object.keys(inject).sort();\n const defineHashes: number[] = [];\n const injectHashes: number[] = [];\n\n for (const key of defineKeys) {\n defineHashes.push(this._getHash(key));\n defineHashes.push(this._getHash(String(defines[key])));\n }\n\n for (const key of injectKeys) {\n injectHashes.push(this._getHash(key));\n injectHashes.push(this._getHash(inject[key]));\n }\n\n // TODO - hash parameters!\n const parameterHash = JSON.stringify(parameters);\n\n return `${vsHash}/${fsHash}D${defineHashes.join('/')}M${moduleHashes.join(\n '/'\n )}I${injectHashes.join('/')}V${varyingHashes.join('/')}H${this.stateHash}B${props.bufferMode}${\n props.transpileToGLSL100 ? 'T' : ''\n }P${parameterHash}`;\n }\n\n _getHash(key: string): number {\n if (this._hashes[key] === undefined) {\n this._hashes[key] = this._hashCounter++;\n }\n return this._hashes[key];\n }\n\n // Dedupe and combine with default modules\n _getModuleList(appModules: ShaderModule[] = []): ShaderModule[] {\n const modules = new Array(this._defaultModules.length + appModules.length);\n const seen: Record<string, boolean> = {};\n let count = 0;\n\n for (let i = 0, len = this._defaultModules.length; i < len; ++i) {\n const module = this._defaultModules[i];\n const name = module.name;\n modules[count++] = module;\n seen[name] = true;\n }\n\n for (let i = 0, len = appModules.length; i < len; ++i) {\n const module = appModules[i];\n const name = module.name;\n if (!seen[name]) {\n modules[count++] = module;\n seen[name] = true;\n }\n }\n\n modules.length = count;\n\n return modules;\n }\n}\n"],"mappings":";;;;;;;;;;AAGA,IAAAA,YAAA,GAAAC,OAAA;AAAqD,SAAAC,2BAAAC,CAAA,EAAAC,cAAA,QAAAC,EAAA,UAAAC,MAAA,oBAAAH,CAAA,CAAAG,MAAA,CAAAC,QAAA,KAAAJ,CAAA,qBAAAE,EAAA,QAAAG,KAAA,CAAAC,OAAA,CAAAN,CAAA,MAAAE,EAAA,GAAAK,2BAAA,CAAAP,CAAA,MAAAC,cAAA,IAAAD,CAAA,WAAAA,CAAA,CAAAQ,MAAA,qBAAAN,EAAA,EAAAF,CAAA,GAAAE,EAAA,MAAAO,CAAA,UAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAH,CAAA,IAAAT,CAAA,CAAAQ,MAAA,WAAAK,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAAd,CAAA,CAAAS,CAAA,UAAAM,CAAA,WAAAA,EAAAC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAP,CAAA,gBAAAQ,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAV,CAAA,WAAAA,EAAA,IAAAT,EAAA,GAAAA,EAAA,CAAAoB,IAAA,CAAAtB,CAAA,MAAAY,CAAA,WAAAA,EAAA,QAAAW,IAAA,GAAArB,EAAA,CAAAsB,IAAA,IAAAL,gBAAA,GAAAI,IAAA,CAAAV,IAAA,SAAAU,IAAA,KAAAR,CAAA,WAAAA,EAAAU,GAAA,IAAAL,MAAA,SAAAC,GAAA,GAAAI,GAAA,KAAAR,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAjB,EAAA,CAAAwB,MAAA,UAAAxB,EAAA,CAAAwB,MAAA,oBAAAN,MAAA,QAAAC,GAAA;AAAA,SAAAd,4BAAAP,CAAA,EAAA2B,MAAA,SAAA3B,CAAA,qBAAAA,CAAA,sBAAA4B,iBAAA,CAAA5B,CAAA,EAAA2B,MAAA,OAAAf,CAAA,GAAAiB,MAAA,CAAAC,SAAA,CAAAC,QAAA,CAAAT,IAAA,CAAAtB,CAAA,EAAAgC,KAAA,aAAApB,CAAA,iBAAAZ,CAAA,CAAAiC,WAAA,EAAArB,CAAA,GAAAZ,CAAA,CAAAiC,WAAA,CAAAC,IAAA,MAAAtB,CAAA,cAAAA,CAAA,mBAAAP,KAAA,CAAA8B,IAAA,CAAAnC,CAAA,OAAAY,CAAA,+DAAAwB,IAAA,CAAAxB,CAAA,UAAAgB,iBAAA,CAAA5B,CAAA,EAAA2B,MAAA;AAAA,SAAAC,kBAAAS,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAA7B,MAAA,EAAA8B,GAAA,GAAAD,GAAA,CAAA7B,MAAA,WAAAC,CAAA,MAAA8B,IAAA,OAAAlC,KAAA,CAAAiC,GAAA,GAAA7B,CAAA,GAAA6B,GAAA,EAAA7B,CAAA,IAAA8B,IAAA,CAAA9B,CAAA,IAAA4B,GAAA,CAAA5B,CAAA,UAAA8B,IAAA;AAAA,SAAAC,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAd,MAAA,CAAAc,IAAA,CAAAF,MAAA,OAAAZ,MAAA,CAAAe,qBAAA,QAAAC,OAAA,GAAAhB,MAAA,CAAAe,qBAAA,CAAAH,MAAA,GAAAC,cAAA,KAAAG,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAlB,MAAA,CAAAmB,wBAAA,CAAAP,MAAA,EAAAM,GAAA,EAAAE,UAAA,OAAAN,IAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,IAAA,EAAAE,OAAA,YAAAF,IAAA;AAAA,SAAAS,cAAAC,MAAA,aAAA5C,CAAA,MAAAA,CAAA,GAAA6C,SAAA,CAAA9C,MAAA,EAAAC,CAAA,UAAA8C,MAAA,WAAAD,SAAA,CAAA7C,CAAA,IAAA6C,SAAA,CAAA7C,CAAA,QAAAA,CAAA,OAAA+B,OAAA,CAAAX,MAAA,CAAA0B,MAAA,OAAAC,OAAA,WAAAC,GAAA,QAAAC,gBAAA,CAAAC,OAAA,EAAAN,MAAA,EAAAI,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAA5B,MAAA,CAAA+B,yBAAA,GAAA/B,MAAA,CAAAgC,gBAAA,CAAAR,MAAA,EAAAxB,MAAA,CAAA+B,yBAAA,CAAAL,MAAA,KAAAf,OAAA,CAAAX,MAAA,CAAA0B,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAA5B,MAAA,CAAAiC,cAAA,CAAAT,MAAA,EAAAI,GAAA,EAAA5B,MAAA,CAAAmB,wBAAA,CAAAO,MAAA,EAAAE,GAAA,iBAAAJ,MAAA;AA+BrD,IAAMU,+BAAmE,GAAG;EAC1EC,EAAE,EAAE,EAAE;EACNC,EAAE,EAAE,EAAE;EACNC,OAAO,EAAE,EAAE;EACXC,OAAO,EAAE,CAAC,CAAC;EACXC,MAAM,EAAE,CAAC,CAAC;EACVC,kBAAkB,EAAE,KAAK;EACzBC,MAAM,EAAE,IAAI;EAEZC,QAAQ,EAAE,EAAE;EACZC,UAAU,EAAE,MAAM;EAClBC,QAAQ,EAAE,eAAe;EACzBC,UAAU,EAAE,CAAC;AACf,CAAC;AAAC,IAKWC,eAAe;EAsB1B,SAAAA,gBAAYC,MAAc,EAAE;IAAA,IAAAC,gBAAA,CAAAlB,OAAA,QAAAgB,eAAA;IAAA,IAAAjB,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA,qBAnBR,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,wBACU,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,mBACmB,CAAC,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,sBACC,CAAC,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,0BAEU,CAAC,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,wBAEH,CAAC,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,0BAC1B,EAAE;IAAA,IAAAD,gBAAA,CAAAC,OAAA,2BACV,EAAE;IAWjC,IAAI,CAACiB,MAAM,GAAGA,MAAM;EACtB;EAAC,IAAAE,aAAA,CAAAnB,OAAA,EAAAgB,eAAA;IAAAlB,GAAA;IAAA3C,KAAA,EAED,SAAAiE,iBAAiBC,MAAoB,EAAQ;MAC3C,IAAI,CAAC,IAAI,CAACC,eAAe,CAACC,IAAI,CAAC,UAACC,CAAC;QAAA,OAAKA,CAAC,CAACjD,IAAI,MAAM,OAAO8C,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAGA,MAAM,CAAC9C,IAAI,CAAC;MAAA,EAAC,EAAE;QACrG,IAAI,CAAC+C,eAAe,CAAC/B,IAAI,CAAC8B,MAAM,CAAC;MACnC;MACA,IAAI,CAACI,SAAS,EAAE;IAClB;EAAC;IAAA3B,GAAA;IAAA3C,KAAA,EAED,SAAAuE,oBAAoBL,MAAoB,EAAQ;MAC9C,IAAMM,UAAU,GAAG,OAAON,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAGA,MAAM,CAAC9C,IAAI;MACpE,IAAI,CAAC+C,eAAe,GAAG,IAAI,CAACA,eAAe,CAACnC,MAAM,CAAC,UAACqC,CAAC;QAAA,OAAKA,CAAC,CAACjD,IAAI,KAAKoD,UAAU;MAAA,EAAC;MAChF,IAAI,CAACF,SAAS,EAAE;IAClB;EAAC;IAAA3B,GAAA;IAAA3C,KAAA,EAED,SAAAyE,cAAcC,IAAY,EAAEC,IAAU,EAAQ;MAC5C,IAAIA,IAAI,EAAE;QACRD,IAAI,GAAG3D,MAAM,CAAC6D,MAAM,CAACD,IAAI,EAAE;UAACD,IAAI,EAAJA;QAAI,CAAC,CAAC;MACpC;MACA,IAAI,CAACG,cAAc,CAACzC,IAAI,CAACsC,IAAI,CAAC;MAC9B,IAAI,CAACJ,SAAS,EAAE;IAClB;EAAC;IAAA3B,GAAA;IAAA3C,KAAA,EAED,SAAA8E,qBAAqBC,OAAiC,EAGpD;MACA,IAAMC,KAAyC,GAAA1C,aAAA,CAAAA,aAAA,KAAOW,+BAA+B,GAAK8B,OAAO,CAAC;MAElG,IAAM3B,OAAO,GAAG,IAAI,CAAC6B,cAAc,CAACD,KAAK,CAAC5B,OAAO,CAAC;MAElD,IAAM8B,IAAI,GAAG,IAAI,CAACC,mBAAmB,CAAA7C,aAAA,CAAAA,aAAA,KAAK0C,KAAK;QAAE5B,OAAO,EAAPA;MAAO,GAAE;MAE1D,IAAI,CAAC,IAAI,CAACgC,cAAc,CAACF,IAAI,CAAC,EAAE;QAC9B,IAAAG,qBAAA,GAAgC,IAAI,CAACC,qBAAqB,CAAAhD,aAAA,CAAAA,aAAA,KAAK0C,KAAK;YAAE5B,OAAO,EAAPA;UAAO,GAAE;UAAxEmC,QAAQ,GAAAF,qBAAA,CAARE,QAAQ;UAAEC,WAAW,GAAAH,qBAAA,CAAXG,WAAW;QAC5BD,QAAQ,CAACL,IAAI,GAAGA,IAAI;QACpB,IAAI,CAACE,cAAc,CAACF,IAAI,CAAC,GAAGK,QAAQ;QACpC,IAAI,CAACE,YAAY,CAACP,IAAI,CAAC,GAAGM,WAAW,IAAK,UAACE,CAAW;UAAA,OAAM,CAAC,CAAC;QAAA,CAAE;QAChE,IAAI,CAACC,UAAU,CAACT,IAAI,CAAC,GAAG,CAAC;MAC3B;MAEA,IAAI,CAACS,UAAU,CAACT,IAAI,CAAC,EAAE;MAEvB,OAAO;QACLK,QAAQ,EAAE,IAAI,CAACH,cAAc,CAACF,IAAI,CAAC;QACnCM,WAAW,EAAE,IAAI,CAACC,YAAY,CAACP,IAAI;MACrC,CAAC;IACH;EAAC;IAAAvC,GAAA;IAAA3C,KAAA,EAED,SAAA4F,QAAQL,QAAwB,EAAQ;MACtC,IAAML,IAAI,GAAGK,QAAQ,CAACL,IAAI;MAC1B,IAAI,CAACS,UAAU,CAACT,IAAI,CAAC,EAAE;MACvB,IAAI,IAAI,CAACS,UAAU,CAACT,IAAI,CAAC,KAAK,CAAC,EAAE;QAC/B,IAAI,CAACE,cAAc,CAACF,IAAI,CAAC,CAACW,OAAO,EAAE;QACnC,OAAO,IAAI,CAACT,cAAc,CAACF,IAAI,CAAC;QAChC,OAAO,IAAI,CAACO,YAAY,CAACP,IAAI,CAAC;QAC9B,OAAO,IAAI,CAACS,UAAU,CAACT,IAAI,CAAC;MAC9B;IACF;EAAC;IAAAvC,GAAA;IAAA3C,KAAA,EAED,SAAAwF,YAAYD,QAAwB,EAAE;MACpC,OAAO,IAAI,CAACE,YAAY,CAACF,QAAQ,CAACL,IAAI,CAAC,IAAI,IAAI;IACjD;EAAC;IAAAvC,GAAA;IAAA3C,KAAA,EAID,SAAAsF,sBAAsBN,KAA+B,EAGnD;MACA,IAAMc,YAAY,GAAG;QACnBC,GAAG,EAAE,IAAI,CAACjC,MAAM,CAACkC,IAAI,CAACD,GAAG;QACzBE,QAAQ,EAAE,IAAI,CAACnC,MAAM,CAACmC;MACxB,CAAC;MAED,IAAI,CAACjB,KAAK,CAAC7B,EAAE,EAAE;QACb,MAAM,IAAI+C,KAAK,CAAC,IAAI,CAAC;MACvB;MAEA,IAAMC,SAAS,GAAG,IAAAC,4BAAe,EAACN,YAAY,EAAAxD,aAAA,CAAAA,aAAA,KAAM0C,KAAK;QAAE7B,EAAE,EAAE6B,KAAK,CAAC7B,EAAE;QAAEkD,aAAa,EAAE,IAAI,CAACxB;MAAc,GAAE;MAE7G,IAAMU,QAAQ,GAAG,IAAI,CAACzB,MAAM,CAACgB,oBAAoB,CAAAxC,aAAA,CAAAA,aAAA,KAC5C0C,KAAK;QACR9B,EAAE,EAAE,IAAI,CAACY,MAAM,CAACwC,YAAY,CAAC;UAACC,KAAK,EAAE,QAAQ;UAAE9D,MAAM,EAAE0D,SAAS,CAACjD;QAAE,CAAC,CAAC;QACrEC,EAAE,EAAEgD,SAAS,CAAChD,EAAE,GAAG,IAAI,CAACW,MAAM,CAACwC,YAAY,CAAC;UAACC,KAAK,EAAE,UAAU;UAAE9D,MAAM,EAAE0D,SAAS,CAAChD;QAAE,CAAC,CAAC,GAAG;MAAI,GAC7F;MAEF,OAAO;QAACoC,QAAQ,EAARA,QAAQ;QAAEC,WAAW,EAAEW,SAAS,CAACX;MAAW,CAAC;IACvD;EAAC;IAAA7C,GAAA;IAAA3C,KAAA,EAGD,SAAAmF,oBAAoBH,KAA+B,EAAU;MAAA,IAAAwB,KAAA;MAC3D,IAAAC,cAAA,GAAkFzB,KAAK,CAAhF5B,OAAO;QAAPA,OAAO,GAAAqD,cAAA,cAAG,EAAE,GAAAA,cAAA;QAAAC,eAAA,GAA+D1B,KAAK,CAAlEvB,QAAQ;QAARA,QAAQ,GAAAiD,eAAA,cAAG,EAAE,GAAAA,eAAA;QAAAC,cAAA,GAAgD3B,KAAK,CAAnD3B,OAAO;QAAPA,OAAO,GAAAsD,cAAA,cAAG,CAAC,CAAC,GAAAA,cAAA;QAAAC,aAAA,GAAkC5B,KAAK,CAArC1B,MAAM;QAANA,MAAM,GAAAsD,aAAA,cAAG,CAAC,CAAC,GAAAA,aAAA;QAAAC,iBAAA,GAAqB7B,KAAK,CAAxBpB,UAAU;QAAVA,UAAU,GAAAiD,iBAAA,cAAG,CAAC,CAAC,GAAAA,iBAAA;MAC7E,IAAMC,MAAM,GAAG,IAAI,CAACC,QAAQ,CAAC/B,KAAK,CAAC9B,EAAE,CAAC;MACvC,IAAM8D,MAAM,GAAGhC,KAAK,CAAC7B,EAAE,GAAG,IAAI,CAAC4D,QAAQ,CAAC/B,KAAK,CAAC7B,EAAE,CAAC,GAAG,CAAC;MAErD,IAAM8D,YAAY,GAAG7D,OAAO,CAAC8D,GAAG,CAAC,UAAC7C,CAAC;QAAA,OAAKmC,KAAI,CAACO,QAAQ,CAAC,OAAO1C,CAAC,KAAK,QAAQ,GAAGA,CAAC,GAAGA,CAAC,CAACjD,IAAI,CAAC;MAAA,EAAC,CAAC+F,IAAI,EAAE;MACjG,IAAMC,aAAa,GAAG3D,QAAQ,CAACyD,GAAG,CAAC,UAACG,CAAC;QAAA,OAAKb,KAAI,CAACO,QAAQ,CAACM,CAAC,CAAC;MAAA,EAAC;MAE3D,IAAMC,UAAU,GAAGvG,MAAM,CAACc,IAAI,CAACwB,OAAO,CAAC,CAAC8D,IAAI,EAAE;MAC9C,IAAMI,UAAU,GAAGxG,MAAM,CAACc,IAAI,CAACyB,MAAM,CAAC,CAAC6D,IAAI,EAAE;MAC7C,IAAMK,YAAsB,GAAG,EAAE;MACjC,IAAMC,YAAsB,GAAG,EAAE;MAAC,IAAAC,SAAA,GAAAzI,0BAAA,CAEhBqI,UAAU;QAAAK,KAAA;MAAA;QAA5B,KAAAD,SAAA,CAAA7H,CAAA,MAAA8H,KAAA,GAAAD,SAAA,CAAA5H,CAAA,IAAAC,IAAA,GAA8B;UAAA,IAAnB4C,GAAG,GAAAgF,KAAA,CAAA3H,KAAA;UACZwH,YAAY,CAACpF,IAAI,CAAC,IAAI,CAAC2E,QAAQ,CAACpE,GAAG,CAAC,CAAC;UACrC6E,YAAY,CAACpF,IAAI,CAAC,IAAI,CAAC2E,QAAQ,CAACa,MAAM,CAACvE,OAAO,CAACV,GAAG,CAAC,CAAC,CAAC,CAAC;QACxD;MAAC,SAAApC,GAAA;QAAAmH,SAAA,CAAAzH,CAAA,CAAAM,GAAA;MAAA;QAAAmH,SAAA,CAAAvH,CAAA;MAAA;MAAA,IAAA0H,UAAA,GAAA5I,0BAAA,CAEiBsI,UAAU;QAAAO,MAAA;MAAA;QAA5B,KAAAD,UAAA,CAAAhI,CAAA,MAAAiI,MAAA,GAAAD,UAAA,CAAA/H,CAAA,IAAAC,IAAA,GAA8B;UAAA,IAAnB4C,IAAG,GAAAmF,MAAA,CAAA9H,KAAA;UACZyH,YAAY,CAACrF,IAAI,CAAC,IAAI,CAAC2E,QAAQ,CAACpE,IAAG,CAAC,CAAC;UACrC8E,YAAY,CAACrF,IAAI,CAAC,IAAI,CAAC2E,QAAQ,CAACzD,MAAM,CAACX,IAAG,CAAC,CAAC,CAAC;QAC/C;MAAC,SAAApC,GAAA;QAAAsH,UAAA,CAAA5H,CAAA,CAAAM,GAAA;MAAA;QAAAsH,UAAA,CAAA1H,CAAA;MAAA;MAGD,IAAM4H,aAAa,GAAGC,IAAI,CAACC,SAAS,CAACrE,UAAU,CAAC;MAEhD,UAAAsE,MAAA,CAAUpB,MAAM,OAAAoB,MAAA,CAAIlB,MAAM,OAAAkB,MAAA,CAAIV,YAAY,CAACW,IAAI,CAAC,GAAG,CAAC,OAAAD,MAAA,CAAIjB,YAAY,CAACkB,IAAI,CACvE,GAAG,CACJ,OAAAD,MAAA,CAAIT,YAAY,CAACU,IAAI,CAAC,GAAG,CAAC,OAAAD,MAAA,CAAId,aAAa,CAACe,IAAI,CAAC,GAAG,CAAC,OAAAD,MAAA,CAAI,IAAI,CAAC5D,SAAS,OAAA4D,MAAA,CAAIlD,KAAK,CAACtB,UAAU,EAAAwE,MAAA,CAC1FlD,KAAK,CAACzB,kBAAkB,GAAG,GAAG,GAAG,EAAE,OAAA2E,MAAA,CACjCH,aAAa;IACnB;EAAC;IAAApF,GAAA;IAAA3C,KAAA,EAED,SAAA+G,SAASpE,GAAW,EAAU;MAC5B,IAAI,IAAI,CAACyF,OAAO,CAACzF,GAAG,CAAC,KAAK0F,SAAS,EAAE;QACnC,IAAI,CAACD,OAAO,CAACzF,GAAG,CAAC,GAAG,IAAI,CAAC2F,YAAY,EAAE;MACzC;MACA,OAAO,IAAI,CAACF,OAAO,CAACzF,GAAG,CAAC;IAC1B;EAAC;IAAAA,GAAA;IAAA3C,KAAA,EAGD,SAAAiF,eAAA,EAAgE;MAAA,IAAjDsD,UAA0B,GAAA/F,SAAA,CAAA9C,MAAA,QAAA8C,SAAA,QAAA6F,SAAA,GAAA7F,SAAA,MAAG,EAAE;MAC5C,IAAMY,OAAO,GAAG,IAAI7D,KAAK,CAAC,IAAI,CAAC4E,eAAe,CAACzE,MAAM,GAAG6I,UAAU,CAAC7I,MAAM,CAAC;MAC1E,IAAM8I,IAA6B,GAAG,CAAC,CAAC;MACxC,IAAIC,KAAK,GAAG,CAAC;MAEb,KAAK,IAAI9I,CAAC,GAAG,CAAC,EAAE6B,GAAG,GAAG,IAAI,CAAC2C,eAAe,CAACzE,MAAM,EAAEC,CAAC,GAAG6B,GAAG,EAAE,EAAE7B,CAAC,EAAE;QAC/D,IAAMuE,MAAM,GAAG,IAAI,CAACC,eAAe,CAACxE,CAAC,CAAC;QACtC,IAAMyB,IAAI,GAAG8C,MAAM,CAAC9C,IAAI;QACxBgC,OAAO,CAACqF,KAAK,EAAE,CAAC,GAAGvE,MAAM;QACzBsE,IAAI,CAACpH,IAAI,CAAC,GAAG,IAAI;MACnB;MAEA,KAAK,IAAIzB,EAAC,GAAG,CAAC,EAAE6B,IAAG,GAAG+G,UAAU,CAAC7I,MAAM,EAAEC,EAAC,GAAG6B,IAAG,EAAE,EAAE7B,EAAC,EAAE;QACrD,IAAMuE,OAAM,GAAGqE,UAAU,CAAC5I,EAAC,CAAC;QAC5B,IAAMyB,KAAI,GAAG8C,OAAM,CAAC9C,IAAI;QACxB,IAAI,CAACoH,IAAI,CAACpH,KAAI,CAAC,EAAE;UACfgC,OAAO,CAACqF,KAAK,EAAE,CAAC,GAAGvE,OAAM;UACzBsE,IAAI,CAACpH,KAAI,CAAC,GAAG,IAAI;QACnB;MACF;MAEAgC,OAAO,CAAC1D,MAAM,GAAG+I,KAAK;MAEtB,OAAOrF,OAAO;IAChB;EAAC;IAAAT,GAAA;IAAA3C,KAAA,EArKD,SAAA0I,0BAAiC5E,MAAc,EAAmB;MAEhEA,MAAM,CAAC6E,sBAAsB,GAAG7E,MAAM,CAAC6E,sBAAsB,IAAI,IAAI9E,eAAe,CAACC,MAAM,CAAC;MAE5F,OAAOA,MAAM,CAAC6E,sBAAsB;IACtC;EAAC;EAAA,OAAA9E,eAAA;AAAA;AAAA+E,OAAA,CAAA/E,eAAA,GAAAA,eAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
export class KeyFrames {
|
|
3
|
+
constructor(keyFrames) {
|
|
4
|
+
_defineProperty(this, "startIndex", -1);
|
|
5
|
+
_defineProperty(this, "endIndex", -1);
|
|
6
|
+
_defineProperty(this, "factor", 0);
|
|
7
|
+
_defineProperty(this, "times", []);
|
|
8
|
+
_defineProperty(this, "values", []);
|
|
9
|
+
_defineProperty(this, "_lastTime", -1);
|
|
10
|
+
this.setKeyFrames(keyFrames);
|
|
11
|
+
this.setTime(0);
|
|
12
|
+
}
|
|
13
|
+
setKeyFrames(keyFrames) {
|
|
14
|
+
const numKeys = keyFrames.length;
|
|
15
|
+
this.times.length = numKeys;
|
|
16
|
+
this.values.length = numKeys;
|
|
17
|
+
for (let i = 0; i < numKeys; ++i) {
|
|
18
|
+
this.times[i] = keyFrames[i][0];
|
|
19
|
+
this.values[i] = keyFrames[i][1];
|
|
20
|
+
}
|
|
21
|
+
this._calculateKeys(this._lastTime);
|
|
22
|
+
}
|
|
23
|
+
setTime(time) {
|
|
24
|
+
time = Math.max(0, time);
|
|
25
|
+
if (time !== this._lastTime) {
|
|
26
|
+
this._calculateKeys(time);
|
|
27
|
+
this._lastTime = time;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
getStartTime() {
|
|
31
|
+
return this.times[this.startIndex];
|
|
32
|
+
}
|
|
33
|
+
getEndTime() {
|
|
34
|
+
return this.times[this.endIndex];
|
|
35
|
+
}
|
|
36
|
+
getStartData() {
|
|
37
|
+
return this.values[this.startIndex];
|
|
38
|
+
}
|
|
39
|
+
getEndData() {
|
|
40
|
+
return this.values[this.endIndex];
|
|
41
|
+
}
|
|
42
|
+
_calculateKeys(time) {
|
|
43
|
+
let index = 0;
|
|
44
|
+
const numKeys = this.times.length;
|
|
45
|
+
for (index = 0; index < numKeys - 2; ++index) {
|
|
46
|
+
if (this.times[index + 1] > time) {
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
this.startIndex = index;
|
|
51
|
+
this.endIndex = index + 1;
|
|
52
|
+
const startTime = this.times[this.startIndex];
|
|
53
|
+
const endTime = this.times[this.endIndex];
|
|
54
|
+
this.factor = Math.min(Math.max(0, (time - startTime) / (endTime - startTime)), 1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=key-frames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-frames.js","names":["KeyFrames","constructor","keyFrames","_defineProperty","setKeyFrames","setTime","numKeys","length","times","values","i","_calculateKeys","_lastTime","time","Math","max","getStartTime","startIndex","getEndTime","endIndex","getStartData","getEndData","index","startTime","endTime","factor","min"],"sources":["../../../src/animation/key-frames.ts"],"sourcesContent":["// keyframes\nexport type KeyFrame<T> = [number, T];\n\n/** Holds a list of key frames (timestamped values) */\nexport class KeyFrames<T = number> {\n startIndex: number = -1;\n endIndex: number = -1;\n factor: number = 0;\n times: number[] = [];\n values: T[] = [];\n private _lastTime = -1;\n\n constructor(keyFrames: KeyFrame<T>[]) {\n this.setKeyFrames(keyFrames);\n this.setTime(0);\n }\n\n setKeyFrames(keyFrames: KeyFrame<T>[]): void {\n const numKeys = keyFrames.length;\n this.times.length = numKeys;\n this.values.length = numKeys;\n\n for (let i = 0; i < numKeys; ++i) {\n this.times[i] = keyFrames[i][0];\n this.values[i] = keyFrames[i][1];\n }\n\n this._calculateKeys(this._lastTime);\n }\n\n setTime(time: number): void {\n time = Math.max(0, time);\n\n if (time !== this._lastTime) {\n this._calculateKeys(time);\n this._lastTime = time;\n }\n }\n\n getStartTime(): number {\n return this.times[this.startIndex];\n }\n\n getEndTime(): number {\n return this.times[this.endIndex];\n }\n\n getStartData(): T {\n return this.values[this.startIndex];\n }\n\n getEndData(): T {\n return this.values[this.endIndex];\n }\n\n _calculateKeys(time: number): void {\n let index = 0;\n const numKeys = this.times.length;\n\n for (index = 0; index < numKeys - 2; ++index) {\n if (this.times[index + 1] > time) {\n break;\n }\n }\n\n this.startIndex = index;\n this.endIndex = index + 1;\n\n const startTime = this.times[this.startIndex];\n const endTime = this.times[this.endIndex];\n this.factor = Math.min(Math.max(0, (time - startTime) / (endTime - startTime)), 1);\n }\n}\n"],"mappings":";AAIA,OAAO,MAAMA,SAAS,CAAa;EAQjCC,WAAWA,CAACC,SAAwB,EAAE;IAAAC,eAAA,qBAPjB,CAAC,CAAC;IAAAA,eAAA,mBACJ,CAAC,CAAC;IAAAA,eAAA,iBACJ,CAAC;IAAAA,eAAA,gBACA,EAAE;IAAAA,eAAA,iBACN,EAAE;IAAAA,eAAA,oBACI,CAAC,CAAC;IAGpB,IAAI,CAACC,YAAY,CAACF,SAAS,CAAC;IAC5B,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC;EACjB;EAEAD,YAAYA,CAACF,SAAwB,EAAQ;IAC3C,MAAMI,OAAO,GAAGJ,SAAS,CAACK,MAAM;IAChC,IAAI,CAACC,KAAK,CAACD,MAAM,GAAGD,OAAO;IAC3B,IAAI,CAACG,MAAM,CAACF,MAAM,GAAGD,OAAO;IAE5B,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,OAAO,EAAE,EAAEI,CAAC,EAAE;MAChC,IAAI,CAACF,KAAK,CAACE,CAAC,CAAC,GAAGR,SAAS,CAACQ,CAAC,CAAC,CAAC,CAAC,CAAC;MAC/B,IAAI,CAACD,MAAM,CAACC,CAAC,CAAC,GAAGR,SAAS,CAACQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC;IAEA,IAAI,CAACC,cAAc,CAAC,IAAI,CAACC,SAAS,CAAC;EACrC;EAEAP,OAAOA,CAACQ,IAAY,EAAQ;IAC1BA,IAAI,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEF,IAAI,CAAC;IAExB,IAAIA,IAAI,KAAK,IAAI,CAACD,SAAS,EAAE;MAC3B,IAAI,CAACD,cAAc,CAACE,IAAI,CAAC;MACzB,IAAI,CAACD,SAAS,GAAGC,IAAI;IACvB;EACF;EAEAG,YAAYA,CAAA,EAAW;IACrB,OAAO,IAAI,CAACR,KAAK,CAAC,IAAI,CAACS,UAAU,CAAC;EACpC;EAEAC,UAAUA,CAAA,EAAW;IACnB,OAAO,IAAI,CAACV,KAAK,CAAC,IAAI,CAACW,QAAQ,CAAC;EAClC;EAEAC,YAAYA,CAAA,EAAM;IAChB,OAAO,IAAI,CAACX,MAAM,CAAC,IAAI,CAACQ,UAAU,CAAC;EACrC;EAEAI,UAAUA,CAAA,EAAM;IACd,OAAO,IAAI,CAACZ,MAAM,CAAC,IAAI,CAACU,QAAQ,CAAC;EACnC;EAEAR,cAAcA,CAACE,IAAY,EAAQ;IACjC,IAAIS,KAAK,GAAG,CAAC;IACb,MAAMhB,OAAO,GAAG,IAAI,CAACE,KAAK,CAACD,MAAM;IAEjC,KAAKe,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGhB,OAAO,GAAG,CAAC,EAAE,EAAEgB,KAAK,EAAE;MAC5C,IAAI,IAAI,CAACd,KAAK,CAACc,KAAK,GAAG,CAAC,CAAC,GAAGT,IAAI,EAAE;QAChC;MACF;IACF;IAEA,IAAI,CAACI,UAAU,GAAGK,KAAK;IACvB,IAAI,CAACH,QAAQ,GAAGG,KAAK,GAAG,CAAC;IAEzB,MAAMC,SAAS,GAAG,IAAI,CAACf,KAAK,CAAC,IAAI,CAACS,UAAU,CAAC;IAC7C,MAAMO,OAAO,GAAG,IAAI,CAAChB,KAAK,CAAC,IAAI,CAACW,QAAQ,CAAC;IACzC,IAAI,CAACM,MAAM,GAAGX,IAAI,CAACY,GAAG,CAACZ,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE,CAACF,IAAI,GAAGU,SAAS,KAAKC,OAAO,GAAGD,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;EACpF;AACF"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
let channelHandles = 1;
|
|
3
|
+
let animationHandles = 1;
|
|
4
|
+
export class Timeline {
|
|
5
|
+
constructor() {
|
|
6
|
+
_defineProperty(this, "time", 0);
|
|
7
|
+
_defineProperty(this, "channels", new Map());
|
|
8
|
+
_defineProperty(this, "animations", new Map());
|
|
9
|
+
_defineProperty(this, "playing", false);
|
|
10
|
+
_defineProperty(this, "lastEngineTime", -1);
|
|
11
|
+
}
|
|
12
|
+
addChannel(props) {
|
|
13
|
+
const {
|
|
14
|
+
delay = 0,
|
|
15
|
+
duration = Number.POSITIVE_INFINITY,
|
|
16
|
+
rate = 1,
|
|
17
|
+
repeat = 1
|
|
18
|
+
} = props;
|
|
19
|
+
const handle = channelHandles++;
|
|
20
|
+
const channel = {
|
|
21
|
+
time: 0,
|
|
22
|
+
delay,
|
|
23
|
+
duration,
|
|
24
|
+
rate,
|
|
25
|
+
repeat
|
|
26
|
+
};
|
|
27
|
+
this._setChannelTime(channel, this.time);
|
|
28
|
+
this.channels.set(handle, channel);
|
|
29
|
+
return handle;
|
|
30
|
+
}
|
|
31
|
+
removeChannel(handle) {
|
|
32
|
+
this.channels.delete(handle);
|
|
33
|
+
for (const [animationHandle, animation] of this.animations) {
|
|
34
|
+
if (animation.channel === handle) {
|
|
35
|
+
this.detachAnimation(animationHandle);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
isFinished(handle) {
|
|
40
|
+
const channel = this.channels.get(handle);
|
|
41
|
+
if (channel === undefined) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return this.time >= channel.delay + channel.duration * channel.repeat;
|
|
45
|
+
}
|
|
46
|
+
getTime(handle) {
|
|
47
|
+
if (handle === undefined) {
|
|
48
|
+
return this.time;
|
|
49
|
+
}
|
|
50
|
+
const channel = this.channels.get(handle);
|
|
51
|
+
if (channel === undefined) {
|
|
52
|
+
return -1;
|
|
53
|
+
}
|
|
54
|
+
return channel.time;
|
|
55
|
+
}
|
|
56
|
+
setTime(time) {
|
|
57
|
+
this.time = Math.max(0, time);
|
|
58
|
+
const channels = this.channels.values();
|
|
59
|
+
for (const channel of channels) {
|
|
60
|
+
this._setChannelTime(channel, this.time);
|
|
61
|
+
}
|
|
62
|
+
const animations = this.animations.values();
|
|
63
|
+
for (const animationData of animations) {
|
|
64
|
+
const {
|
|
65
|
+
animation,
|
|
66
|
+
channel
|
|
67
|
+
} = animationData;
|
|
68
|
+
animation.setTime(this.getTime(channel));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
play() {
|
|
72
|
+
this.playing = true;
|
|
73
|
+
}
|
|
74
|
+
pause() {
|
|
75
|
+
this.playing = false;
|
|
76
|
+
this.lastEngineTime = -1;
|
|
77
|
+
}
|
|
78
|
+
reset() {
|
|
79
|
+
this.setTime(0);
|
|
80
|
+
}
|
|
81
|
+
attachAnimation(animation, channelHandle) {
|
|
82
|
+
const animationHandle = animationHandles++;
|
|
83
|
+
this.animations.set(animationHandle, {
|
|
84
|
+
animation,
|
|
85
|
+
channel: channelHandle
|
|
86
|
+
});
|
|
87
|
+
animation.setTime(this.getTime(channelHandle));
|
|
88
|
+
return animationHandle;
|
|
89
|
+
}
|
|
90
|
+
detachAnimation(handle) {
|
|
91
|
+
this.animations.delete(handle);
|
|
92
|
+
}
|
|
93
|
+
update(engineTime) {
|
|
94
|
+
if (this.playing) {
|
|
95
|
+
if (this.lastEngineTime === -1) {
|
|
96
|
+
this.lastEngineTime = engineTime;
|
|
97
|
+
}
|
|
98
|
+
this.setTime(this.time + (engineTime - this.lastEngineTime));
|
|
99
|
+
this.lastEngineTime = engineTime;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
_setChannelTime(channel, time) {
|
|
103
|
+
const offsetTime = time - channel.delay;
|
|
104
|
+
const totalDuration = channel.duration * channel.repeat;
|
|
105
|
+
if (offsetTime >= totalDuration) {
|
|
106
|
+
channel.time = channel.duration * channel.rate;
|
|
107
|
+
} else {
|
|
108
|
+
channel.time = Math.max(0, offsetTime) % channel.duration;
|
|
109
|
+
channel.time *= channel.rate;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","names":["channelHandles","animationHandles","Timeline","constructor","_defineProperty","Map","addChannel","props","delay","duration","Number","POSITIVE_INFINITY","rate","repeat","handle","channel","time","_setChannelTime","channels","set","removeChannel","delete","animationHandle","animation","animations","detachAnimation","isFinished","get","undefined","getTime","setTime","Math","max","values","animationData","play","playing","pause","lastEngineTime","reset","attachAnimation","channelHandle","update","engineTime","offsetTime","totalDuration"],"sources":["../../../src/animation/timeline.ts"],"sourcesContent":["// luma.gl, MIT license\n\n/**\n * Timeline channel properties\n * @param delay = 0;\n * @param duration = Number.POSITIVE_INFINITY;\n * @param rate = 1\n * @param repeat = 1\n */\n export type ChannelOptions = {\n delay?: number\n duration?: number\n rate?: number\n repeat?: number\n}\n\nexport type AnimationOptions = {\n setTime: (time: number) => void\n}\n\n type Channel = {\n time: number\n delay: number\n duration: number\n rate: number\n repeat: number\n}\n\ntype Animation = {\n channel?: number;\n animation: {\n setTime: (time: number) => void\n }\n}\n\nlet channelHandles = 1;\nlet animationHandles = 1;\n\nexport class Timeline {\n time: number = 0;\n channels = new Map<number, Channel>();\n animations = new Map<number, Animation>();\n playing: boolean = false;\n lastEngineTime: number = -1;\n\n constructor() {\n }\n\n addChannel(props: ChannelOptions): number {\n const {delay = 0, duration = Number.POSITIVE_INFINITY, rate = 1, repeat = 1} = props;\n\n const handle = channelHandles++;\n const channel: Channel = {\n time: 0,\n delay,\n duration,\n rate,\n repeat\n };\n this._setChannelTime(channel, this.time);\n this.channels.set(handle, channel);\n\n return handle;\n }\n\n removeChannel(handle: number): void {\n this.channels.delete(handle);\n\n for (const [animationHandle, animation] of this.animations) {\n if (animation.channel === handle) {\n this.detachAnimation(animationHandle);\n }\n }\n }\n\n isFinished(handle: number): boolean {\n const channel = this.channels.get(handle);\n if (channel === undefined) {\n return false;\n }\n\n return this.time >= channel.delay + channel.duration * channel.repeat;\n }\n\n getTime(handle?: number): number {\n if (handle === undefined) {\n return this.time;\n }\n\n const channel = this.channels.get(handle);\n\n if (channel === undefined) {\n return -1;\n }\n\n return channel.time;\n }\n\n setTime(time: number): void {\n this.time = Math.max(0, time);\n\n const channels = this.channels.values();\n for (const channel of channels) {\n this._setChannelTime(channel, this.time);\n }\n\n const animations = this.animations.values();\n for (const animationData of animations) {\n const {animation, channel} = animationData;\n animation.setTime(this.getTime(channel));\n }\n }\n\n play(): void {\n this.playing = true;\n }\n\n pause(): void {\n this.playing = false;\n this.lastEngineTime = -1;\n }\n\n reset(): void {\n this.setTime(0);\n }\n\n attachAnimation(animation: AnimationOptions, channelHandle?: number): number {\n const animationHandle = animationHandles++;\n\n this.animations.set(animationHandle, {\n animation,\n channel: channelHandle\n });\n\n animation.setTime(this.getTime(channelHandle));\n\n return animationHandle;\n }\n\n detachAnimation(handle: number): void {\n this.animations.delete(handle);\n }\n\n update(engineTime: number): void {\n if (this.playing) {\n if (this.lastEngineTime === -1) {\n this.lastEngineTime = engineTime;\n }\n this.setTime(this.time + (engineTime - this.lastEngineTime));\n this.lastEngineTime = engineTime;\n }\n }\n\n _setChannelTime(channel: Channel, time: number): void {\n const offsetTime = time - channel.delay;\n const totalDuration = channel.duration * channel.repeat;\n // Note(Tarek): Don't loop on final repeat.\n if (offsetTime >= totalDuration) {\n channel.time = channel.duration * channel.rate;\n } else {\n channel.time = Math.max(0, offsetTime) % channel.duration;\n channel.time *= channel.rate;\n }\n }\n}\n"],"mappings":"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"}
|