@luma.gl/engine 8.5.8 → 8.6.0-alpha.2
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 +18 -0
- package/dist/animation/key-frames.d.ts.map +1 -0
- package/dist/{esm/animation → animation}/key-frames.js +13 -6
- package/dist/animation/key-frames.js.map +1 -0
- package/dist/animation/timeline.d.ts +51 -0
- package/dist/animation/timeline.d.ts.map +1 -0
- package/dist/{esm/animation → animation}/timeline.js +10 -5
- package/dist/animation/timeline.js.map +1 -0
- package/dist/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +5 -0
- package/dist/bundle.js.map +1 -0
- package/dist/geometries/cone-geometry.d.ts +10 -0
- package/dist/geometries/cone-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/cone-geometry.js +2 -2
- package/dist/geometries/cone-geometry.js.map +1 -0
- package/dist/geometries/cube-geometry.d.ts +9 -0
- package/dist/geometries/cube-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/cube-geometry.js +18 -18
- package/dist/geometries/cube-geometry.js.map +1 -0
- package/dist/geometries/cylinder-geometry.d.ts +10 -0
- package/dist/geometries/cylinder-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/cylinder-geometry.js +2 -2
- package/dist/geometries/cylinder-geometry.js.map +1 -0
- package/dist/geometries/ico-sphere-geometry.d.ts +11 -0
- package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/ico-sphere-geometry.js +2 -2
- package/dist/geometries/ico-sphere-geometry.js.map +1 -0
- package/dist/geometries/plane-geometry.d.ts +10 -0
- package/dist/geometries/plane-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/plane-geometry.js +5 -5
- package/dist/geometries/plane-geometry.js.map +1 -0
- package/dist/geometries/sphere-geometry.d.ts +12 -0
- package/dist/geometries/sphere-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/sphere-geometry.js +2 -9
- package/dist/geometries/sphere-geometry.js.map +1 -0
- package/dist/geometries/truncated-cone-geometry.d.ts +13 -0
- package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/truncated-cone-geometry.js +1 -1
- package/dist/geometries/truncated-cone-geometry.js.map +1 -0
- package/dist/geometry/geometry-utils.d.ts +2 -0
- package/dist/geometry/geometry-utils.d.ts.map +1 -0
- package/dist/{esm/geometry → geometry}/geometry-utils.js +0 -0
- package/dist/geometry/geometry-utils.js.map +1 -0
- package/dist/geometry/geometry.d.ts +44 -0
- package/dist/geometry/geometry.d.ts.map +1 -0
- package/dist/{esm/geometry → geometry}/geometry.js +28 -19
- package/dist/geometry/geometry.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/animation-loop.d.ts +149 -0
- package/dist/lib/animation-loop.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/animation-loop.js +190 -143
- package/dist/lib/animation-loop.js.map +1 -0
- package/dist/lib/model-utils.d.ts +4 -0
- package/dist/lib/model-utils.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/model-utils.js +3 -2
- package/dist/lib/model-utils.js.map +1 -0
- package/dist/lib/model.d.ts +109 -0
- package/dist/lib/model.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/model.js +76 -20
- package/dist/lib/model.js.map +1 -0
- package/dist/lib/program-manager.d.ts +39 -0
- package/dist/lib/program-manager.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/program-manager.js +29 -18
- package/dist/lib/program-manager.js.map +1 -0
- package/dist/lib/render-loop.d.ts +27 -0
- package/dist/lib/render-loop.d.ts.map +1 -0
- package/dist/lib/render-loop.js +56 -0
- package/dist/lib/render-loop.js.map +1 -0
- package/dist/transform/buffer-transform.d.ts +36 -0
- package/dist/transform/buffer-transform.d.ts.map +1 -0
- package/dist/{esm/transform → transform}/buffer-transform.js +15 -8
- package/dist/transform/buffer-transform.js.map +1 -0
- package/dist/transform/texture-transform.d.ts +57 -0
- package/dist/transform/texture-transform.d.ts.map +1 -0
- package/dist/{esm/transform → transform}/texture-transform.js +48 -16
- package/dist/transform/texture-transform.js.map +1 -0
- package/dist/transform/transform-shader-utils.d.ts +26 -0
- package/dist/transform/transform-shader-utils.d.ts.map +1 -0
- package/dist/{esm/transform → transform}/transform-shader-utils.js +38 -46
- package/dist/transform/transform-shader-utils.js.map +1 -0
- package/dist/transform/transform-types.d.ts +44 -0
- package/dist/transform/transform-types.d.ts.map +1 -0
- package/dist/transform/transform-types.js +2 -0
- package/dist/transform/transform-types.js.map +1 -0
- package/dist/transform/transform.d.ts +47 -0
- package/dist/transform/transform.d.ts.map +1 -0
- package/dist/{esm/transform → transform}/transform.js +63 -43
- package/dist/transform/transform.js.map +1 -0
- package/dist/utils/clip-space.d.ts +5 -0
- package/dist/utils/clip-space.d.ts.map +1 -0
- package/dist/{esm/utils → utils}/clip-space.js +3 -17
- package/dist/utils/clip-space.js.map +1 -0
- package/package.json +11 -11
- package/src/animation/{key-frames.js → key-frames.ts} +18 -16
- package/src/animation/{timeline.js → timeline.ts} +54 -18
- package/src/bundle.ts +4 -0
- package/src/geometries/{cone-geometry.js → cone-geometry.ts} +9 -3
- package/src/geometries/{cube-geometry.js → cube-geometry.ts} +17 -12
- package/src/geometries/cylinder-geometry.ts +20 -0
- package/src/geometries/{ico-sphere-geometry.js → ico-sphere-geometry.ts} +10 -3
- package/src/geometries/{plane-geometry.js → plane-geometry.ts} +11 -6
- package/src/geometries/{sphere-geometry.js → sphere-geometry.ts} +15 -11
- package/src/geometries/{truncated-cone-geometry.js → truncated-cone-geometry.ts} +14 -5
- package/src/geometry/{geometry-utils.js → geometry-utils.ts} +2 -0
- package/src/geometry/{geometry.js → geometry.ts} +47 -34
- package/src/index.ts +35 -0
- package/src/lib/animation-loop.ts +724 -0
- package/src/lib/{model-utils.js → model-utils.ts} +2 -2
- package/src/lib/{model.js → model.ts} +184 -66
- package/src/lib/{program-manager.js → program-manager.ts} +53 -34
- package/src/lib/render-loop.ts +56 -0
- package/src/transform/{buffer-transform.js → buffer-transform.ts} +42 -27
- package/src/transform/{texture-transform.js → texture-transform.ts} +35 -25
- package/src/transform/{transform-shader-utils.js → transform-shader-utils.ts} +55 -27
- package/src/transform/transform-types.ts +42 -0
- package/src/transform/transform.ts +189 -0
- package/src/utils/{clip-space.js → clip-space.ts} +4 -3
- package/dist/dist.js +0 -32403
- package/dist/dist.min.js +0 -1
- package/dist/es5/animation/key-frames.d.ts +0 -19
- package/dist/es5/animation/key-frames.js +0 -95
- package/dist/es5/animation/key-frames.js.map +0 -1
- package/dist/es5/animation/timeline.d.ts +0 -39
- package/dist/es5/animation/timeline.js +0 -211
- package/dist/es5/animation/timeline.js.map +0 -1
- package/dist/es5/bundle.js +0 -9
- package/dist/es5/bundle.js.map +0 -1
- package/dist/es5/geometries/cone-geometry.d.ts +0 -5
- package/dist/es5/geometries/cone-geometry.js +0 -59
- package/dist/es5/geometries/cone-geometry.js.map +0 -1
- package/dist/es5/geometries/cube-geometry.d.ts +0 -5
- package/dist/es5/geometries/cube-geometry.js +0 -75
- package/dist/es5/geometries/cube-geometry.js.map +0 -1
- package/dist/es5/geometries/cylinder-geometry.d.ts +0 -5
- package/dist/es5/geometries/cylinder-geometry.js +0 -55
- package/dist/es5/geometries/cylinder-geometry.js.map +0 -1
- package/dist/es5/geometries/ico-sphere-geometry.d.ts +0 -5
- package/dist/es5/geometries/ico-sphere-geometry.js +0 -217
- package/dist/es5/geometries/ico-sphere-geometry.js.map +0 -1
- package/dist/es5/geometries/index.d.ts +0 -7
- package/dist/es5/geometries/index.js +0 -64
- package/dist/es5/geometries/index.js.map +0 -1
- package/dist/es5/geometries/plane-geometry.d.ts +0 -5
- package/dist/es5/geometries/plane-geometry.js +0 -168
- package/dist/es5/geometries/plane-geometry.js.map +0 -1
- package/dist/es5/geometries/sphere-geometry.d.ts +0 -5
- package/dist/es5/geometries/sphere-geometry.js +0 -152
- package/dist/es5/geometries/sphere-geometry.js.map +0 -1
- package/dist/es5/geometries/truncated-cone-geometry.d.ts +0 -5
- package/dist/es5/geometries/truncated-cone-geometry.js +0 -171
- package/dist/es5/geometries/truncated-cone-geometry.js.map +0 -1
- package/dist/es5/geometry/geometry-utils.d.ts +0 -1
- package/dist/es5/geometry/geometry-utils.js +0 -49
- package/dist/es5/geometry/geometry-utils.js.map +0 -1
- package/dist/es5/geometry/geometry.d.ts +0 -25
- package/dist/es5/geometry/geometry.js +0 -150
- package/dist/es5/geometry/geometry.js.map +0 -1
- package/dist/es5/index.d.ts +0 -19
- package/dist/es5/index.js +0 -128
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/lib/animation-loop.d.ts +0 -158
- package/dist/es5/lib/animation-loop.js +0 -642
- package/dist/es5/lib/animation-loop.js.map +0 -1
- package/dist/es5/lib/model-utils.d.ts +0 -3
- package/dist/es5/lib/model-utils.js +0 -110
- package/dist/es5/lib/model-utils.js.map +0 -1
- package/dist/es5/lib/model.d.ts +0 -214
- package/dist/es5/lib/model.js +0 -584
- package/dist/es5/lib/model.js.map +0 -1
- package/dist/es5/lib/program-manager.d.ts +0 -79
- package/dist/es5/lib/program-manager.js +0 -238
- package/dist/es5/lib/program-manager.js.map +0 -1
- package/dist/es5/transform/buffer-transform.d.ts +0 -13
- package/dist/es5/transform/buffer-transform.js +0 -294
- package/dist/es5/transform/buffer-transform.js.map +0 -1
- package/dist/es5/transform/resource-transform.d.ts +0 -16
- package/dist/es5/transform/texture-transform.d.ts +0 -16
- package/dist/es5/transform/texture-transform.js +0 -405
- package/dist/es5/transform/texture-transform.js.map +0 -1
- package/dist/es5/transform/transform-shader-utils.d.ts +0 -31
- package/dist/es5/transform/transform-shader-utils.js +0 -160
- package/dist/es5/transform/transform-shader-utils.js.map +0 -1
- package/dist/es5/transform/transform.d.ts +0 -33
- package/dist/es5/transform/transform.js +0 -274
- package/dist/es5/transform/transform.js.map +0 -1
- package/dist/es5/utils/clip-space.d.ts +0 -5
- package/dist/es5/utils/clip-space.js +0 -72
- package/dist/es5/utils/clip-space.js.map +0 -1
- package/dist/esm/animation/key-frames.d.ts +0 -19
- package/dist/esm/animation/key-frames.js.map +0 -1
- package/dist/esm/animation/timeline.d.ts +0 -39
- package/dist/esm/animation/timeline.js.map +0 -1
- package/dist/esm/bundle.js +0 -7
- package/dist/esm/bundle.js.map +0 -1
- package/dist/esm/geometries/cone-geometry.d.ts +0 -5
- package/dist/esm/geometries/cone-geometry.js.map +0 -1
- package/dist/esm/geometries/cube-geometry.d.ts +0 -5
- package/dist/esm/geometries/cube-geometry.js.map +0 -1
- package/dist/esm/geometries/cylinder-geometry.d.ts +0 -5
- package/dist/esm/geometries/cylinder-geometry.js.map +0 -1
- package/dist/esm/geometries/ico-sphere-geometry.d.ts +0 -5
- package/dist/esm/geometries/ico-sphere-geometry.js.map +0 -1
- package/dist/esm/geometries/index.d.ts +0 -7
- package/dist/esm/geometries/index.js +0 -8
- package/dist/esm/geometries/index.js.map +0 -1
- package/dist/esm/geometries/plane-geometry.d.ts +0 -5
- package/dist/esm/geometries/plane-geometry.js.map +0 -1
- package/dist/esm/geometries/sphere-geometry.d.ts +0 -5
- package/dist/esm/geometries/sphere-geometry.js.map +0 -1
- package/dist/esm/geometries/truncated-cone-geometry.d.ts +0 -5
- package/dist/esm/geometries/truncated-cone-geometry.js.map +0 -1
- package/dist/esm/geometry/geometry-utils.d.ts +0 -1
- package/dist/esm/geometry/geometry-utils.js.map +0 -1
- package/dist/esm/geometry/geometry.d.ts +0 -25
- package/dist/esm/geometry/geometry.js.map +0 -1
- package/dist/esm/index.d.ts +0 -19
- package/dist/esm/index.js +0 -16
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/lib/animation-loop.d.ts +0 -158
- package/dist/esm/lib/animation-loop.js.map +0 -1
- package/dist/esm/lib/model-utils.d.ts +0 -3
- package/dist/esm/lib/model-utils.js.map +0 -1
- package/dist/esm/lib/model.d.ts +0 -214
- package/dist/esm/lib/model.js.map +0 -1
- package/dist/esm/lib/program-manager.d.ts +0 -79
- package/dist/esm/lib/program-manager.js.map +0 -1
- package/dist/esm/transform/buffer-transform.d.ts +0 -13
- package/dist/esm/transform/buffer-transform.js.map +0 -1
- package/dist/esm/transform/resource-transform.d.ts +0 -16
- package/dist/esm/transform/texture-transform.d.ts +0 -16
- package/dist/esm/transform/texture-transform.js.map +0 -1
- package/dist/esm/transform/transform-shader-utils.d.ts +0 -31
- package/dist/esm/transform/transform-shader-utils.js.map +0 -1
- package/dist/esm/transform/transform.d.ts +0 -33
- package/dist/esm/transform/transform.js.map +0 -1
- package/dist/esm/utils/clip-space.d.ts +0 -5
- package/dist/esm/utils/clip-space.js.map +0 -1
- package/src/animation/key-frames.d.ts +0 -19
- package/src/animation/timeline.d.ts +0 -39
- package/src/bundle.js +0 -7
- package/src/geometries/cone-geometry.d.ts +0 -5
- package/src/geometries/cube-geometry.d.ts +0 -5
- package/src/geometries/cylinder-geometry.d.ts +0 -5
- package/src/geometries/cylinder-geometry.js +0 -14
- package/src/geometries/ico-sphere-geometry.d.ts +0 -5
- package/src/geometries/index.d.ts +0 -7
- package/src/geometries/index.js +0 -7
- package/src/geometries/plane-geometry.d.ts +0 -5
- package/src/geometries/sphere-geometry.d.ts +0 -5
- package/src/geometries/truncated-cone-geometry.d.ts +0 -5
- package/src/geometry/geometry-utils.d.ts +0 -1
- package/src/geometry/geometry.d.ts +0 -25
- package/src/index.d.ts +0 -19
- package/src/index.js +0 -22
- package/src/lib/animation-loop.d.ts +0 -158
- package/src/lib/animation-loop.js +0 -601
- package/src/lib/model-utils.d.ts +0 -3
- package/src/lib/model.d.ts +0 -214
- package/src/lib/program-manager.d.ts +0 -79
- package/src/transform/buffer-transform.d.ts +0 -13
- package/src/transform/resource-transform.d.ts +0 -16
- package/src/transform/texture-transform.d.ts +0 -16
- package/src/transform/transform-shader-utils.d.ts +0 -31
- package/src/transform/transform.d.ts +0 -33
- package/src/transform/transform.js +0 -177
- package/src/utils/clip-space.d.ts +0 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/transform/transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAS,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAC,WAAW,EAAE,MAAM,EAAC,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAC,WAAW,EAAgB,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,MAAM,cAAc,CAAC;AAGjC,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAE5F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GAAG,OAAO;IASpE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAQ;IAC3B,YAAY,SAAK;IACjB,eAAe,MAAQ;IACvB,gBAAgB,MAAQ;IACxB,eAAe,MAAQ;gBAEX,MAAM,EAAE,MAAM,GAAG,sBAAsB,EAAE,KAAK,GAAE,cAAmB;IAQ/E,8BAA8B;IAC9B,OAAO,IAAI,IAAI;IAaf,iCAAiC;IACjC,MAAM,IAAI,IAAI;IAId,8BAA8B;IAC9B,GAAG,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI;IAYxC,0CAA0C;IAC1C,IAAI,IAAI,IAAI;IASZ,mDAAmD;IACnD,SAAS,CAAC,WAAW,GAAE,MAAa,GAAG,MAAM;IAI7C,qDAAqD;IACrD,OAAO,CAAC,OAAO,GAAE;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAM;IAW9D,yDAAyD;IACzD,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC,kDAAkD;IAClD,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAYnC,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAoBxC,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc;IASxD,wBAAwB,CAAC,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,cAAc;IAa1E,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,oBAAoB;CAQvE"}
|
|
@@ -1,28 +1,45 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import { assert } from '@luma.gl/api';
|
|
3
|
+
import GL from '@luma.gl/constants';
|
|
4
|
+
import { getShaderInfo, getPassthroughFS } from '@luma.gl/shadertools';
|
|
5
|
+
import { WebGLDevice, isObjectEmpty } from '@luma.gl/webgl';
|
|
6
|
+
import Model from '../lib/model';
|
|
2
7
|
import BufferTransform from './buffer-transform';
|
|
3
8
|
import TextureTransform from './texture-transform';
|
|
4
|
-
import { isWebGL2 } from '@luma.gl/gltools';
|
|
5
|
-
import { assert, isObjectEmpty, getShaderVersion } from '@luma.gl/webgl';
|
|
6
|
-
import Model from '../lib/model';
|
|
7
9
|
export default class Transform {
|
|
8
|
-
static isSupported(
|
|
9
|
-
|
|
10
|
+
static isSupported(device) {
|
|
11
|
+
try {
|
|
12
|
+
const webglDevice = WebGLDevice.attach(device);
|
|
13
|
+
return webglDevice.isWebGL2;
|
|
14
|
+
} catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
10
17
|
}
|
|
11
18
|
|
|
12
|
-
constructor(
|
|
13
|
-
this
|
|
14
|
-
|
|
15
|
-
this
|
|
16
|
-
|
|
17
|
-
this
|
|
18
|
-
|
|
19
|
+
constructor(device, props = {}) {
|
|
20
|
+
_defineProperty(this, "device", void 0);
|
|
21
|
+
|
|
22
|
+
_defineProperty(this, "gl", void 0);
|
|
23
|
+
|
|
24
|
+
_defineProperty(this, "model", null);
|
|
25
|
+
|
|
26
|
+
_defineProperty(this, "elementCount", 0);
|
|
27
|
+
|
|
28
|
+
_defineProperty(this, "bufferTransform", null);
|
|
29
|
+
|
|
30
|
+
_defineProperty(this, "textureTransform", null);
|
|
31
|
+
|
|
32
|
+
_defineProperty(this, "elementIDBuffer", null);
|
|
33
|
+
|
|
34
|
+
this.device = WebGLDevice.attach(device);
|
|
35
|
+
this.gl = this.device.gl2;
|
|
19
36
|
|
|
20
37
|
this._initialize(props);
|
|
21
38
|
|
|
22
39
|
Object.seal(this);
|
|
23
40
|
}
|
|
24
41
|
|
|
25
|
-
|
|
42
|
+
destroy() {
|
|
26
43
|
const {
|
|
27
44
|
model,
|
|
28
45
|
bufferTransform,
|
|
@@ -42,12 +59,16 @@ export default class Transform {
|
|
|
42
59
|
}
|
|
43
60
|
}
|
|
44
61
|
|
|
45
|
-
|
|
62
|
+
delete() {
|
|
63
|
+
this.destroy();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
run(options) {
|
|
46
67
|
const {
|
|
47
68
|
clearRenderTarget = true
|
|
48
|
-
} =
|
|
69
|
+
} = options || {};
|
|
49
70
|
|
|
50
|
-
const updatedOpts = this._updateDrawOptions(
|
|
71
|
+
const updatedOpts = this._updateDrawOptions(options);
|
|
51
72
|
|
|
52
73
|
if (clearRenderTarget && updatedOpts.framebuffer) {
|
|
53
74
|
updatedOpts.framebuffer.clear({
|
|
@@ -73,11 +94,11 @@ export default class Transform {
|
|
|
73
94
|
return this.bufferTransform && this.bufferTransform.getBuffer(varyingName);
|
|
74
95
|
}
|
|
75
96
|
|
|
76
|
-
getData(
|
|
97
|
+
getData(options = {}) {
|
|
77
98
|
const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
|
|
78
99
|
|
|
79
100
|
for (const resourceTransform of resourceTransforms) {
|
|
80
|
-
const data = resourceTransform.getData(
|
|
101
|
+
const data = resourceTransform.getData(options);
|
|
81
102
|
|
|
82
103
|
if (data) {
|
|
83
104
|
return data;
|
|
@@ -91,19 +112,19 @@ export default class Transform {
|
|
|
91
112
|
return this.textureTransform && this.textureTransform.getFramebuffer();
|
|
92
113
|
}
|
|
93
114
|
|
|
94
|
-
update(
|
|
95
|
-
if ('elementCount' in
|
|
96
|
-
this.model.setVertexCount(
|
|
115
|
+
update(props) {
|
|
116
|
+
if ('elementCount' in props) {
|
|
117
|
+
this.model.setVertexCount(props.elementCount);
|
|
97
118
|
}
|
|
98
119
|
|
|
99
120
|
const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
|
|
100
121
|
|
|
101
122
|
for (const resourceTransform of resourceTransforms) {
|
|
102
|
-
resourceTransform.update(
|
|
123
|
+
resourceTransform.update(props);
|
|
103
124
|
}
|
|
104
125
|
}
|
|
105
126
|
|
|
106
|
-
_initialize(props
|
|
127
|
+
_initialize(props) {
|
|
107
128
|
const {
|
|
108
129
|
gl
|
|
109
130
|
} = this;
|
|
@@ -111,21 +132,25 @@ export default class Transform {
|
|
|
111
132
|
this._buildResourceTransforms(gl, props);
|
|
112
133
|
|
|
113
134
|
props = this._updateModelProps(props);
|
|
114
|
-
this.model = new Model(
|
|
135
|
+
this.model = new Model(this.device, Object.assign({}, props, {
|
|
115
136
|
fs: props.fs || getPassthroughFS({
|
|
116
|
-
version:
|
|
137
|
+
version: getShaderInfo(props.vs).version
|
|
117
138
|
}),
|
|
118
139
|
id: props.id || 'transform-model',
|
|
119
|
-
drawMode: props.drawMode ||
|
|
140
|
+
drawMode: props.drawMode || GL.POINTS,
|
|
120
141
|
vertexCount: props.elementCount
|
|
121
142
|
}));
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
143
|
+
|
|
144
|
+
if (this.bufferTransform) {
|
|
145
|
+
this.bufferTransform.setupResources({
|
|
146
|
+
model: this.model
|
|
147
|
+
});
|
|
148
|
+
}
|
|
125
149
|
}
|
|
126
150
|
|
|
127
151
|
_updateModelProps(props) {
|
|
128
|
-
let updatedProps =
|
|
152
|
+
let updatedProps = { ...props
|
|
153
|
+
};
|
|
129
154
|
const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
|
|
130
155
|
|
|
131
156
|
for (const resourceTransform of resourceTransforms) {
|
|
@@ -147,8 +172,9 @@ export default class Transform {
|
|
|
147
172
|
assert(this.bufferTransform || this.textureTransform, 'must provide source/feedback buffers or source/target textures');
|
|
148
173
|
}
|
|
149
174
|
|
|
150
|
-
_updateDrawOptions(
|
|
151
|
-
let updatedOpts =
|
|
175
|
+
_updateDrawOptions(options) {
|
|
176
|
+
let updatedOpts = { ...options
|
|
177
|
+
};
|
|
152
178
|
const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
|
|
153
179
|
|
|
154
180
|
for (const resourceTransform of resourceTransforms) {
|
|
@@ -161,18 +187,12 @@ export default class Transform {
|
|
|
161
187
|
}
|
|
162
188
|
|
|
163
189
|
function canCreateBufferTransform(props) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
return false;
|
|
190
|
+
const canCreate = !isObjectEmpty(props.feedbackBuffers) || !isObjectEmpty(props.feedbackMap) || props.varyings && props.varyings.length > 0;
|
|
191
|
+
return Boolean(canCreate);
|
|
169
192
|
}
|
|
170
193
|
|
|
171
194
|
function canCreateTextureTransform(props) {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
return false;
|
|
195
|
+
const canCreate = !isObjectEmpty(props._sourceTextures) || props._targetTexture || props._targetTextureVarying;
|
|
196
|
+
return canCreate;
|
|
177
197
|
}
|
|
178
198
|
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/transform/transform.ts"],"names":["assert","GL","getShaderInfo","getPassthroughFS","WebGLDevice","isObjectEmpty","Model","BufferTransform","TextureTransform","Transform","isSupported","device","webglDevice","attach","isWebGL2","constructor","props","gl","gl2","_initialize","Object","seal","destroy","model","bufferTransform","textureTransform","delete","run","options","clearRenderTarget","updatedOpts","_updateDrawOptions","framebuffer","clear","color","transform","swap","swapped","resourceTransforms","filter","Boolean","resourceTransform","getBuffer","varyingName","getData","data","getFramebuffer","update","setVertexCount","elementCount","_buildResourceTransforms","_updateModelProps","assign","fs","version","vs","id","drawMode","POINTS","vertexCount","setupResources","updatedProps","updateModelProps","canCreateBufferTransform","canCreateTextureTransform","getDrawOptions","canCreate","feedbackBuffers","feedbackMap","varyings","length","_sourceTextures","_targetTexture","_targetTextureVarying"],"mappings":"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","sourcesContent":["import {Device, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getShaderInfo, getPassthroughFS} from '@luma.gl/shadertools';\nimport type {Framebuffer, Buffer} from '@luma.gl/webgl';\nimport {WebGLDevice, isObjectEmpty} from '@luma.gl/webgl';\n\nimport Model from '../lib/model';\nimport BufferTransform from './buffer-transform';\nimport TextureTransform from './texture-transform';\nimport {TransformProps, TransformRunOptions, TransformDrawOptions} from './transform-types';\n\n/** \n * Takes source and target buffers/textures and sets up the pipeline \n */\nexport default class Transform {\n /** \n * Check if Transforms are supported (they are not under WebGL1)\n * @todo differentiate writing to buffer vs not\n */\n static isSupported(device: Device | WebGL2RenderingContext): boolean {\n try {\n const webglDevice = WebGLDevice.attach(device);\n return webglDevice.isWebGL2;\n } catch {\n return false;\n }\n }\n\n readonly device: WebGLDevice;\n readonly gl: WebGL2RenderingContext;\n model: Model | null = null;\n elementCount = 0;\n bufferTransform = null;\n textureTransform = null;\n elementIDBuffer = null;\n\n constructor(device: Device | WebGL2RenderingContext, props: TransformProps = {}) {\n this.device = WebGLDevice.attach(device);\n // TODO assert webgl2?\n this.gl = this.device.gl2;\n this._initialize(props);\n Object.seal(this);\n }\n\n /** Delete owned resources. */\n destroy(): void {\n const {model, bufferTransform, textureTransform} = this;\n if (model) {\n model.delete();\n }\n if (bufferTransform) {\n bufferTransform.delete();\n }\n if (textureTransform) {\n textureTransform.delete();\n }\n }\n\n /** @deprecated Use destroy*() */\n delete(): void {\n this.destroy();\n }\n\n /** Run one transform loop. */\n run(options?: TransformRunOptions): void {\n const {clearRenderTarget = true} = options || {};\n\n const updatedOpts = this._updateDrawOptions(options);\n\n if (clearRenderTarget && updatedOpts.framebuffer) {\n updatedOpts.framebuffer.clear({color: true});\n }\n\n this.model.transform(updatedOpts);\n }\n\n /** swap resources if a map is provided */\n swap(): void {\n let swapped = false;\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n swapped = swapped || resourceTransform.swap();\n }\n assert(swapped, 'Nothing to swap');\n }\n\n /** Return Buffer object for given varying name. */\n getBuffer(varyingName: string = null): Buffer {\n return this.bufferTransform && this.bufferTransform.getBuffer(varyingName);\n }\n\n /** Return data either from Buffer or from Texture */\n getData(options: {packed?: boolean; varyingName?: string} = {}) {\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n const data = resourceTransform.getData(options);\n if (data) {\n return data;\n }\n }\n return null;\n }\n\n /** Return framebuffer object if rendering to textures */\n getFramebuffer(): Framebuffer | null {\n return this.textureTransform && this.textureTransform.getFramebuffer();\n }\n\n /** Update some or all buffer/texture bindings. */\n update(props: TransformProps): void {\n if ('elementCount' in props) {\n this.model.setVertexCount(props.elementCount);\n }\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n resourceTransform.update(props);\n }\n }\n\n // Private\n\n _initialize(props: TransformProps): void {\n const {gl} = this;\n this._buildResourceTransforms(gl, props);\n\n props = this._updateModelProps(props);\n this.model = new Model(\n this.device,\n Object.assign({}, props, {\n fs: props.fs || getPassthroughFS({version: getShaderInfo(props.vs).version}),\n id: props.id || 'transform-model',\n drawMode: props.drawMode || GL.POINTS,\n vertexCount: props.elementCount\n })\n );\n\n if (this.bufferTransform) {\n this.bufferTransform.setupResources({model: this.model});\n }\n }\n\n _updateModelProps(props: TransformProps): TransformProps {\n let updatedProps = {...props};\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n updatedProps = resourceTransform.updateModelProps(updatedProps);\n }\n return updatedProps;\n }\n\n _buildResourceTransforms(gl: WebGL2RenderingContext, props: TransformProps) {\n if (canCreateBufferTransform(props)) {\n this.bufferTransform = new BufferTransform(gl, props);\n }\n if (canCreateTextureTransform(props)) {\n this.textureTransform = new TextureTransform(gl, props);\n }\n assert(\n this.bufferTransform || this.textureTransform,\n 'must provide source/feedback buffers or source/target textures'\n );\n }\n\n _updateDrawOptions(options: TransformRunOptions): TransformDrawOptions {\n let updatedOpts = {...options};\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n updatedOpts = Object.assign(updatedOpts, resourceTransform.getDrawOptions(updatedOpts));\n }\n return updatedOpts;\n }\n}\n\n// Helper Methods\n\nfunction canCreateBufferTransform(props: TransformProps): boolean {\n const canCreate = !isObjectEmpty(props.feedbackBuffers) ||\n !isObjectEmpty(props.feedbackMap) ||\n (props.varyings && props.varyings.length > 0);\n return Boolean(canCreate);\n}\n\nfunction canCreateTextureTransform(props: TransformProps): boolean {\n const canCreate =\n !isObjectEmpty(props._sourceTextures) ||\n props._targetTexture ||\n props._targetTextureVarying\n return canCreate;\n}\n"],"file":"transform.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clip-space.d.ts","sourceRoot":"","sources":["../../src/utils/clip-space.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAwB/C,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,KAAK;gBAC9B,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,EAAE,UAAU;CAoBzD"}
|
|
@@ -1,21 +1,7 @@
|
|
|
1
|
+
import GL from '@luma.gl/constants';
|
|
1
2
|
import Model from '../lib/model';
|
|
2
3
|
import Geometry from '../geometry/geometry';
|
|
3
|
-
const CLIPSPACE_VERTEX_SHADER =
|
|
4
|
-
attribute vec2 aClipSpacePosition;
|
|
5
|
-
attribute vec2 aTexCoord;
|
|
6
|
-
attribute vec2 aCoordinate;
|
|
7
|
-
|
|
8
|
-
varying vec2 position;
|
|
9
|
-
varying vec2 coordinate;
|
|
10
|
-
varying vec2 uv;
|
|
11
|
-
|
|
12
|
-
void main(void) {
|
|
13
|
-
gl_Position = vec4(aClipSpacePosition, 0., 1.);
|
|
14
|
-
position = aClipSpacePosition;
|
|
15
|
-
coordinate = aCoordinate;
|
|
16
|
-
uv = aTexCoord;
|
|
17
|
-
}
|
|
18
|
-
`;
|
|
4
|
+
const CLIPSPACE_VERTEX_SHADER = "attribute vec2 aClipSpacePosition;\nattribute vec2 aTexCoord;\nattribute vec2 aCoordinate;\n\nvarying vec2 position;\nvarying vec2 coordinate;\nvarying vec2 uv;\n\nvoid main(void) {\n gl_Position = vec4(aClipSpacePosition, 0., 1.);\n position = aClipSpacePosition;\n coordinate = aCoordinate;\n uv = aTexCoord;\n}\n";
|
|
19
5
|
const POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];
|
|
20
6
|
export default class ClipSpace extends Model {
|
|
21
7
|
constructor(gl, opts) {
|
|
@@ -23,7 +9,7 @@ export default class ClipSpace extends Model {
|
|
|
23
9
|
super(gl, Object.assign({}, opts, {
|
|
24
10
|
vs: CLIPSPACE_VERTEX_SHADER,
|
|
25
11
|
geometry: new Geometry({
|
|
26
|
-
drawMode:
|
|
12
|
+
drawMode: GL.TRIANGLE_STRIP,
|
|
27
13
|
vertexCount: 4,
|
|
28
14
|
attributes: {
|
|
29
15
|
aClipSpacePosition: {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/clip-space.ts"],"names":["GL","Model","Geometry","CLIPSPACE_VERTEX_SHADER","POSITIONS","ClipSpace","constructor","gl","opts","TEX_COORDS","map","coord","Object","assign","vs","geometry","drawMode","TRIANGLE_STRIP","vertexCount","attributes","aClipSpacePosition","size","value","Float32Array","aTexCoord","aCoordinate","setVertexCount"],"mappings":"AACA,OAAOA,EAAP,MAAe,oBAAf;AACA,OAAOC,KAAP,MAAgC,cAAhC;AACA,OAAOC,QAAP,MAAqB,sBAArB;AAEA,MAAMC,uBAAuB,oUAA7B;AAkBA,MAAMC,SAAS,GAAG,CAAC,CAAC,CAAF,EAAK,CAAC,CAAN,EAAS,CAAT,EAAY,CAAC,CAAb,EAAgB,CAAC,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,CAAlB;AAGA,eAAe,MAAMC,SAAN,SAAwBJ,KAAxB,CAA8B;AAC3CK,EAAAA,WAAW,CAACC,EAAD,EAA4BC,IAA5B,EAA+C;AACxD,UAAMC,UAAU,GAAGL,SAAS,CAACM,GAAV,CAAeC,KAAD,IAAYA,KAAK,KAAK,CAAC,CAAX,GAAe,CAAf,GAAmBA,KAA7C,CAAnB;AAEA,UACEJ,EADF,EAEEK,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBL,IAAlB,EAAwB;AACtBM,MAAAA,EAAE,EAAEX,uBADkB;AAEtBY,MAAAA,QAAQ,EAAE,IAAIb,QAAJ,CAAa;AACrBc,QAAAA,QAAQ,EAAEhB,EAAE,CAACiB,cADQ;AAErBC,QAAAA,WAAW,EAAE,CAFQ;AAGrBC,QAAAA,UAAU,EAAE;AACVC,UAAAA,kBAAkB,EAAE;AAACC,YAAAA,IAAI,EAAE,CAAP;AAAUC,YAAAA,KAAK,EAAE,IAAIC,YAAJ,CAAiBnB,SAAjB;AAAjB,WADV;AAEVoB,UAAAA,SAAS,EAAE;AAACH,YAAAA,IAAI,EAAE,CAAP;AAAUC,YAAAA,KAAK,EAAE,IAAIC,YAAJ,CAAiBd,UAAjB;AAAjB,WAFD;AAGVgB,UAAAA,WAAW,EAAE;AAACJ,YAAAA,IAAI,EAAE,CAAP;AAAUC,YAAAA,KAAK,EAAE,IAAIC,YAAJ,CAAiBd,UAAjB;AAAjB;AAHH;AAHS,OAAb;AAFY,KAAxB,CAFF;AAeA,SAAKiB,cAAL,CAAoB,CAApB;AACD;;AApB0C","sourcesContent":["// ClipSpace\nimport GL from '@luma.gl/constants';\nimport Model, {ModelProps} from '../lib/model';\nimport Geometry from '../geometry/geometry';\n\nconst CLIPSPACE_VERTEX_SHADER = `\\\nattribute vec2 aClipSpacePosition;\nattribute vec2 aTexCoord;\nattribute vec2 aCoordinate;\n\nvarying vec2 position;\nvarying vec2 coordinate;\nvarying vec2 uv;\n\nvoid main(void) {\n gl_Position = vec4(aClipSpacePosition, 0., 1.);\n position = aClipSpacePosition;\n coordinate = aCoordinate;\n uv = aTexCoord;\n}\n`;\n\n/* eslint-disable indent, no-multi-spaces */\nconst POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];\n\n\nexport default class ClipSpace extends Model {\n constructor(gl: WebGLRenderingContext, opts?: ModelProps) {\n const TEX_COORDS = POSITIONS.map((coord) => (coord === -1 ? 0 : coord));\n\n super(\n gl,\n Object.assign({}, opts, {\n vs: CLIPSPACE_VERTEX_SHADER,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_STRIP,\n vertexCount: 4,\n attributes: {\n aClipSpacePosition: {size: 2, value: new Float32Array(POSITIONS)},\n aTexCoord: {size: 2, value: new Float32Array(TEX_COORDS)},\n aCoordinate: {size: 2, value: new Float32Array(TEX_COORDS)}\n }\n })\n })\n );\n this.setVertexCount(4);\n }\n}\n"],"file":"clip-space.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luma.gl/engine",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.6.0-alpha.2",
|
|
4
4
|
"description": "WebGL2 Components for High Performance Rendering and Computation",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"animation",
|
|
17
17
|
"3d"
|
|
18
18
|
],
|
|
19
|
-
"types": "src/index.
|
|
20
|
-
"main": "dist/
|
|
21
|
-
"module": "dist/
|
|
19
|
+
"types": "src/index.ts",
|
|
20
|
+
"main": "dist/index.js",
|
|
21
|
+
"module": "dist/index.js",
|
|
22
22
|
"files": [
|
|
23
23
|
"src",
|
|
24
24
|
"dist",
|
|
@@ -26,17 +26,17 @@
|
|
|
26
26
|
],
|
|
27
27
|
"sideEffects": false,
|
|
28
28
|
"scripts": {
|
|
29
|
-
"pre-build": "npm run build-bundle
|
|
29
|
+
"pre-build": "npm run build-bundle",
|
|
30
30
|
"build-bundle": "webpack --display=minimal --config ../../scripts/bundle.config.js"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@babel/runtime": "^7.0.0",
|
|
34
|
-
"@luma.gl/constants": "8.
|
|
35
|
-
"@luma.gl/
|
|
36
|
-
"@luma.gl/
|
|
37
|
-
"@luma.gl/webgl": "8.5.8",
|
|
34
|
+
"@luma.gl/constants": "8.6.0-alpha.2",
|
|
35
|
+
"@luma.gl/shadertools": "8.6.0-alpha.2",
|
|
36
|
+
"@luma.gl/webgl": "8.6.0-alpha.2",
|
|
38
37
|
"@math.gl/core": "^3.5.0",
|
|
39
|
-
"probe.gl": "
|
|
38
|
+
"@probe.gl/log": "3.5.0-alpha.5",
|
|
39
|
+
"@probe.gl/stats": "3.5.0-alpha.5"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "bdcebda76c1b4e47b127cdbd3f426ea6cbae44f1"
|
|
42
42
|
}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
// keyframes
|
|
2
|
+
export type KeyFrame<T> = [number, T];
|
|
2
3
|
|
|
3
|
-
export class KeyFrames {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
export class KeyFrames<T = number> {
|
|
5
|
+
startIndex: number = -1;
|
|
6
|
+
endIndex: number = -1;
|
|
7
|
+
factor: number = 0;
|
|
8
|
+
times: number[] = [];
|
|
9
|
+
values: T[] = [];
|
|
10
|
+
private _lastTime = -1;
|
|
11
|
+
|
|
12
|
+
constructor(keyFrames: KeyFrame<T>[]) {
|
|
11
13
|
this.setKeyFrames(keyFrames);
|
|
12
14
|
this.setTime(0);
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
setKeyFrames(keyFrames) {
|
|
17
|
+
setKeyFrames(keyFrames: KeyFrame<T>[]): void {
|
|
16
18
|
const numKeys = keyFrames.length;
|
|
17
19
|
this.times.length = numKeys;
|
|
18
20
|
this.values.length = numKeys;
|
|
@@ -25,7 +27,7 @@ export class KeyFrames {
|
|
|
25
27
|
this._calculateKeys(this._lastTime);
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
setTime(time) {
|
|
30
|
+
setTime(time: number): void {
|
|
29
31
|
time = Math.max(0, time);
|
|
30
32
|
|
|
31
33
|
if (time !== this._lastTime) {
|
|
@@ -34,23 +36,23 @@ export class KeyFrames {
|
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
38
|
|
|
37
|
-
getStartTime() {
|
|
39
|
+
getStartTime(): number {
|
|
38
40
|
return this.times[this.startIndex];
|
|
39
41
|
}
|
|
40
42
|
|
|
41
|
-
getEndTime() {
|
|
43
|
+
getEndTime(): number {
|
|
42
44
|
return this.times[this.endIndex];
|
|
43
45
|
}
|
|
44
46
|
|
|
45
|
-
getStartData() {
|
|
47
|
+
getStartData(): T {
|
|
46
48
|
return this.values[this.startIndex];
|
|
47
49
|
}
|
|
48
50
|
|
|
49
|
-
getEndData() {
|
|
51
|
+
getEndData(): T {
|
|
50
52
|
return this.values[this.endIndex];
|
|
51
53
|
}
|
|
52
54
|
|
|
53
|
-
_calculateKeys(time) {
|
|
55
|
+
_calculateKeys(time: number): void {
|
|
54
56
|
let index = 0;
|
|
55
57
|
const numKeys = this.times.length;
|
|
56
58
|
|
|
@@ -1,20 +1,56 @@
|
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Timeline channel properties
|
|
5
|
+
* @param delay = 0;
|
|
6
|
+
* @param duration = Number.POSITIVE_INFINITY;
|
|
7
|
+
* @param rate = 1
|
|
8
|
+
* @param repeat = 1
|
|
9
|
+
*/
|
|
10
|
+
export type ChannelOptions = {
|
|
11
|
+
delay?: number
|
|
12
|
+
duration?: number
|
|
13
|
+
rate?: number
|
|
14
|
+
repeat?: number
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type AnimationOptions = {
|
|
18
|
+
setTime: (time: number) => void
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
type Channel = {
|
|
22
|
+
time: number
|
|
23
|
+
delay: number
|
|
24
|
+
duration: number
|
|
25
|
+
rate: number
|
|
26
|
+
repeat: number
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type Animation = {
|
|
30
|
+
channel: number;
|
|
31
|
+
animation: {
|
|
32
|
+
setTime: (time: number) => void
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
1
36
|
let channelHandles = 1;
|
|
2
37
|
let animationHandles = 1;
|
|
3
38
|
|
|
4
39
|
export class Timeline {
|
|
40
|
+
time: number = 0;
|
|
41
|
+
channels = new Map<number, Channel>();
|
|
42
|
+
animations = new Map<number, Animation>();
|
|
43
|
+
playing: boolean = false;
|
|
44
|
+
lastEngineTime: number = -1;
|
|
45
|
+
|
|
5
46
|
constructor() {
|
|
6
|
-
this.time = 0;
|
|
7
|
-
this.channels = new Map();
|
|
8
|
-
this.animations = new Map();
|
|
9
|
-
this.playing = false;
|
|
10
|
-
this.lastEngineTime = -1;
|
|
11
47
|
}
|
|
12
48
|
|
|
13
|
-
addChannel(props) {
|
|
49
|
+
addChannel(props: ChannelOptions): number {
|
|
14
50
|
const {delay = 0, duration = Number.POSITIVE_INFINITY, rate = 1, repeat = 1} = props;
|
|
15
51
|
|
|
16
52
|
const handle = channelHandles++;
|
|
17
|
-
const channel = {
|
|
53
|
+
const channel: Channel = {
|
|
18
54
|
time: 0,
|
|
19
55
|
delay,
|
|
20
56
|
duration,
|
|
@@ -27,7 +63,7 @@ export class Timeline {
|
|
|
27
63
|
return handle;
|
|
28
64
|
}
|
|
29
65
|
|
|
30
|
-
removeChannel(handle) {
|
|
66
|
+
removeChannel(handle: number): void {
|
|
31
67
|
this.channels.delete(handle);
|
|
32
68
|
|
|
33
69
|
for (const [animationHandle, animation] of this.animations) {
|
|
@@ -37,7 +73,7 @@ export class Timeline {
|
|
|
37
73
|
}
|
|
38
74
|
}
|
|
39
75
|
|
|
40
|
-
isFinished(handle) {
|
|
76
|
+
isFinished(handle: number): boolean {
|
|
41
77
|
const channel = this.channels.get(handle);
|
|
42
78
|
if (channel === undefined) {
|
|
43
79
|
return false;
|
|
@@ -46,7 +82,7 @@ export class Timeline {
|
|
|
46
82
|
return this.time >= channel.delay + channel.duration * channel.repeat;
|
|
47
83
|
}
|
|
48
84
|
|
|
49
|
-
getTime(handle) {
|
|
85
|
+
getTime(handle?: number): number {
|
|
50
86
|
if (handle === undefined) {
|
|
51
87
|
return this.time;
|
|
52
88
|
}
|
|
@@ -60,7 +96,7 @@ export class Timeline {
|
|
|
60
96
|
return channel.time;
|
|
61
97
|
}
|
|
62
98
|
|
|
63
|
-
setTime(time) {
|
|
99
|
+
setTime(time: number): void {
|
|
64
100
|
this.time = Math.max(0, time);
|
|
65
101
|
|
|
66
102
|
const channels = this.channels.values();
|
|
@@ -75,20 +111,20 @@ export class Timeline {
|
|
|
75
111
|
}
|
|
76
112
|
}
|
|
77
113
|
|
|
78
|
-
play() {
|
|
114
|
+
play(): void {
|
|
79
115
|
this.playing = true;
|
|
80
116
|
}
|
|
81
117
|
|
|
82
|
-
pause() {
|
|
118
|
+
pause(): void {
|
|
83
119
|
this.playing = false;
|
|
84
120
|
this.lastEngineTime = -1;
|
|
85
121
|
}
|
|
86
122
|
|
|
87
|
-
reset() {
|
|
123
|
+
reset(): void {
|
|
88
124
|
this.setTime(0);
|
|
89
125
|
}
|
|
90
126
|
|
|
91
|
-
attachAnimation(animation, channelHandle) {
|
|
127
|
+
attachAnimation(animation: AnimationOptions, channelHandle: number): number {
|
|
92
128
|
const animationHandle = animationHandles++;
|
|
93
129
|
|
|
94
130
|
this.animations.set(animationHandle, {
|
|
@@ -101,11 +137,11 @@ export class Timeline {
|
|
|
101
137
|
return animationHandle;
|
|
102
138
|
}
|
|
103
139
|
|
|
104
|
-
detachAnimation(handle) {
|
|
140
|
+
detachAnimation(handle: number): void {
|
|
105
141
|
this.animations.delete(handle);
|
|
106
142
|
}
|
|
107
143
|
|
|
108
|
-
update(engineTime) {
|
|
144
|
+
update(engineTime: number): void {
|
|
109
145
|
if (this.playing) {
|
|
110
146
|
if (this.lastEngineTime === -1) {
|
|
111
147
|
this.lastEngineTime = engineTime;
|
|
@@ -115,7 +151,7 @@ export class Timeline {
|
|
|
115
151
|
}
|
|
116
152
|
}
|
|
117
153
|
|
|
118
|
-
_setChannelTime(channel, time) {
|
|
154
|
+
_setChannelTime(channel: Channel, time: number): void {
|
|
119
155
|
const offsetTime = time - channel.delay;
|
|
120
156
|
const totalDuration = channel.duration * channel.repeat;
|
|
121
157
|
// Note(Tarek): Don't loop on final repeat.
|
package/src/bundle.ts
ADDED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import TruncatedConeGeometry from './truncated-cone-geometry';
|
|
1
|
+
import {TruncatedConeGeometry} from './truncated-cone-geometry';
|
|
2
2
|
import {uid} from '@luma.gl/webgl';
|
|
3
3
|
|
|
4
|
-
export
|
|
5
|
-
|
|
4
|
+
export type ConeGeometryProps = {
|
|
5
|
+
id?: string;
|
|
6
|
+
radius?: number;
|
|
7
|
+
cap?: boolean;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export class ConeGeometry extends TruncatedConeGeometry {
|
|
11
|
+
constructor(props: ConeGeometryProps = {}) {
|
|
6
12
|
const {id = uid('cone-geometry'), radius = 1, cap = true} = props;
|
|
7
13
|
super({
|
|
8
14
|
...props,
|
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
import Geometry from '../geometry/geometry';
|
|
2
2
|
import {uid} from '@luma.gl/webgl';
|
|
3
3
|
|
|
4
|
+
export type CubeGeometryProps = {
|
|
5
|
+
id?: string;
|
|
6
|
+
attributes?
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export class CubeGeometry extends Geometry {
|
|
10
|
+
constructor(props: CubeGeometryProps = {}) {
|
|
11
|
+
const {id = uid('cube-geometry')} = props;
|
|
12
|
+
super({
|
|
13
|
+
...props,
|
|
14
|
+
id,
|
|
15
|
+
indices: {size: 1, value: new Uint16Array(CUBE_INDICES)},
|
|
16
|
+
attributes: {...ATTRIBUTES, ...props.attributes}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
4
21
|
// prettier-ignore
|
|
5
22
|
const CUBE_INDICES = new Uint16Array([
|
|
6
23
|
0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13,
|
|
@@ -55,15 +72,3 @@ const ATTRIBUTES = {
|
|
|
55
72
|
NORMAL: {size: 3, value: new Float32Array(CUBE_NORMALS)},
|
|
56
73
|
TEXCOORD_0: {size: 2, value: new Float32Array(CUBE_TEX_COORDS)}
|
|
57
74
|
};
|
|
58
|
-
|
|
59
|
-
export default class CubeGeometry extends Geometry {
|
|
60
|
-
constructor(props = {}) {
|
|
61
|
-
const {id = uid('cube-geometry')} = props;
|
|
62
|
-
super({
|
|
63
|
-
...props,
|
|
64
|
-
id,
|
|
65
|
-
indices: {size: 1, value: new Uint16Array(CUBE_INDICES)},
|
|
66
|
-
attributes: {...ATTRIBUTES, ...props.attributes}
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {TruncatedConeGeometry} from './truncated-cone-geometry';
|
|
2
|
+
import {uid} from '@luma.gl/webgl';
|
|
3
|
+
|
|
4
|
+
export type CylinderGeometryProps = {
|
|
5
|
+
id?: string;
|
|
6
|
+
radius?: number;
|
|
7
|
+
attributes?
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export class CylinderGeometry extends TruncatedConeGeometry {
|
|
11
|
+
constructor(props: CylinderGeometryProps = {}) {
|
|
12
|
+
const {id = uid('cylinder-geometry'), radius = 1} = props;
|
|
13
|
+
super({
|
|
14
|
+
...props,
|
|
15
|
+
id,
|
|
16
|
+
bottomRadius: radius,
|
|
17
|
+
topRadius: radius
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -7,8 +7,15 @@ import {uid} from '@luma.gl/webgl';
|
|
|
7
7
|
const ICO_POSITIONS = [-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 1, 0, 0];
|
|
8
8
|
const ICO_INDICES = [3, 4, 5, 3, 5, 1, 3, 1, 0, 3, 0, 4, 4, 0, 2, 4, 2, 5, 2, 0, 1, 5, 2, 1];
|
|
9
9
|
|
|
10
|
-
export
|
|
11
|
-
|
|
10
|
+
export type IcoSphereGeometryProps = {
|
|
11
|
+
id?: string;
|
|
12
|
+
radius?: number;
|
|
13
|
+
iterations?: number;
|
|
14
|
+
attributes?
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export class IcoSphereGeometry extends Geometry {
|
|
18
|
+
constructor(props: IcoSphereGeometryProps = {}) {
|
|
12
19
|
const {id = uid('ico-sphere-geometry')} = props;
|
|
13
20
|
const {indices, attributes} = tesselateIcosaHedron(props);
|
|
14
21
|
super({
|
|
@@ -20,7 +27,7 @@ export default class IcoSphereGeometry extends Geometry {
|
|
|
20
27
|
}
|
|
21
28
|
}
|
|
22
29
|
|
|
23
|
-
function tesselateIcosaHedron(props) {
|
|
30
|
+
function tesselateIcosaHedron(props: IcoSphereGeometryProps) {
|
|
24
31
|
const {iterations = 0} = props;
|
|
25
32
|
|
|
26
33
|
const PI = Math.PI;
|