@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,56 @@
|
|
|
1
|
+
import {Stats} from '@probe.gl/stats';
|
|
2
|
+
import type {AnimationProps} from './animation-loop';
|
|
3
|
+
import AnimationLoop from './animation-loop';
|
|
4
|
+
import {Timeline} from '../animation/timeline'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Minimal animation loop that initializes models in constructor
|
|
8
|
+
* Simplifying type management
|
|
9
|
+
*/
|
|
10
|
+
export abstract class RenderLoop {
|
|
11
|
+
constructor(animationProps?: AnimationProps) {}
|
|
12
|
+
onRender(animationProps: AnimationProps) {}
|
|
13
|
+
onFinalize(animationProps: AnimationProps) {}
|
|
14
|
+
|
|
15
|
+
static getAnimationLoop(RenderLoopConstructor: typeof RenderLoop) {
|
|
16
|
+
return new WrappedAnimationLoop(RenderLoopConstructor);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Instantiates and runs the render loop */
|
|
20
|
+
static run(RenderLoopConstructor: typeof RenderLoop, options?: {start?: boolean}): WrappedAnimationLoop {
|
|
21
|
+
const animationLoop = RenderLoop.getAnimationLoop(RenderLoopConstructor);
|
|
22
|
+
if (options?.start !== false) {
|
|
23
|
+
animationLoop.start();
|
|
24
|
+
}
|
|
25
|
+
return animationLoop;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
class WrappedAnimationLoop extends AnimationLoop {
|
|
30
|
+
RenderLoopConstructor: typeof RenderLoop;
|
|
31
|
+
renderLoop: RenderLoop;
|
|
32
|
+
|
|
33
|
+
getInfo() {
|
|
34
|
+
// @ts-ignore
|
|
35
|
+
return this.RenderLoopConstructor.info;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
constructor(RenderLoopConstructor: typeof RenderLoop) {
|
|
39
|
+
super();
|
|
40
|
+
this.RenderLoopConstructor = RenderLoopConstructor;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
onInitialize(animationProps: AnimationProps) {
|
|
44
|
+
// @ts-expect-error
|
|
45
|
+
this.renderLoop = new this.RenderLoopConstructor(animationProps);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
onRender(animationProps: AnimationProps) {
|
|
49
|
+
this.renderLoop.onRender(animationProps);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
onFinalize(animationProps: AnimationProps) {
|
|
53
|
+
this.renderLoop?.onFinalize?.(animationProps);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
@@ -1,28 +1,40 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {Buffer, TransformFeedback} from '@luma.gl/webgl';
|
|
3
|
-
import {
|
|
1
|
+
import {assert} from '@luma.gl/api';
|
|
2
|
+
import {Buffer, TransformFeedback, isWebGL2} from '@luma.gl/webgl';
|
|
3
|
+
import type {TransformProps, TransformDrawOptions, TransformRunOptions, TransformBinding} from './transform-types';
|
|
4
|
+
|
|
5
|
+
// import {TransformDrawOptions, TransformModelProps} from './resource-transform';
|
|
6
|
+
// export interface BufferTransform2 {
|
|
7
|
+
// setupResources(opts: any): void;
|
|
8
|
+
// updateModelProps(props?: {}): TransformProps;
|
|
9
|
+
// getDrawOptions(opts?: {}): TransformDrawOptions;
|
|
10
|
+
// swap(): boolean;
|
|
11
|
+
// update(opts?: {}): void;
|
|
12
|
+
// getBuffer(varyingName: any): any;
|
|
13
|
+
// getData(options?: {varyingName: string}): any;
|
|
14
|
+
// delete(): void;
|
|
15
|
+
// }
|
|
4
16
|
|
|
5
17
|
export default class BufferTransform {
|
|
6
|
-
|
|
18
|
+
gl: WebGL2RenderingContext;
|
|
19
|
+
currentIndex = 0;
|
|
20
|
+
feedbackMap = {};
|
|
21
|
+
varyings: string[] | null = null; // varyings array
|
|
22
|
+
bindings: TransformBinding[] = [];
|
|
23
|
+
resources = {}; // resources to be deleted
|
|
24
|
+
|
|
25
|
+
constructor(gl: WebGL2RenderingContext, props: TransformProps = {}) {
|
|
7
26
|
this.gl = gl;
|
|
8
|
-
this.currentIndex = 0;
|
|
9
|
-
this.feedbackMap = {};
|
|
10
|
-
this.varyings = null; // varyings array
|
|
11
|
-
this.bindings = []; // each element is an object : {sourceBuffers, feedbackBuffers, transformFeedback}
|
|
12
|
-
|
|
13
|
-
this.resources = {}; // resources to be deleted
|
|
14
|
-
|
|
15
27
|
this._initialize(props);
|
|
16
28
|
Object.seal(this);
|
|
17
29
|
}
|
|
18
30
|
|
|
19
|
-
setupResources(opts) {
|
|
31
|
+
setupResources(opts): void {
|
|
20
32
|
for (const binding of this.bindings) {
|
|
21
33
|
this._setupTransformFeedback(binding, opts);
|
|
22
34
|
}
|
|
23
35
|
}
|
|
24
36
|
|
|
25
|
-
updateModelProps(props = {}) {
|
|
37
|
+
updateModelProps(props: TransformProps = {}): TransformProps {
|
|
26
38
|
const {varyings} = this;
|
|
27
39
|
if (varyings.length > 0) {
|
|
28
40
|
props = Object.assign({}, props, {varyings});
|
|
@@ -30,15 +42,16 @@ export default class BufferTransform {
|
|
|
30
42
|
return props;
|
|
31
43
|
}
|
|
32
44
|
|
|
33
|
-
|
|
45
|
+
// @ts-expect-error
|
|
46
|
+
getDrawOptions(opts: TransformRunOptions = {}): TransformDrawOptions {
|
|
34
47
|
const binding = this.bindings[this.currentIndex];
|
|
35
48
|
const {sourceBuffers, transformFeedback} = binding;
|
|
49
|
+
// @ts-expect-error
|
|
36
50
|
const attributes = Object.assign({}, sourceBuffers, opts.attributes);
|
|
37
|
-
|
|
38
51
|
return {attributes, transformFeedback};
|
|
39
52
|
}
|
|
40
53
|
|
|
41
|
-
swap() {
|
|
54
|
+
swap(): boolean {
|
|
42
55
|
if (this.feedbackMap) {
|
|
43
56
|
this.currentIndex = this._getNextIndex();
|
|
44
57
|
return true;
|
|
@@ -52,7 +65,7 @@ export default class BufferTransform {
|
|
|
52
65
|
}
|
|
53
66
|
|
|
54
67
|
// returns current feedbackBuffer of given name
|
|
55
|
-
getBuffer(varyingName) {
|
|
68
|
+
getBuffer(varyingName: string | null): Buffer | null {
|
|
56
69
|
const {feedbackBuffers} = this.bindings[this.currentIndex];
|
|
57
70
|
const bufferOrParams = varyingName ? feedbackBuffers[varyingName] : null;
|
|
58
71
|
if (!bufferOrParams) {
|
|
@@ -61,7 +74,7 @@ export default class BufferTransform {
|
|
|
61
74
|
return bufferOrParams instanceof Buffer ? bufferOrParams : bufferOrParams.buffer;
|
|
62
75
|
}
|
|
63
76
|
|
|
64
|
-
getData(options = {}) {
|
|
77
|
+
getData(options: {varyingName?: string} = {}) {
|
|
65
78
|
const {varyingName} = options;
|
|
66
79
|
const buffer = this.getBuffer(varyingName);
|
|
67
80
|
if (buffer) {
|
|
@@ -71,7 +84,7 @@ export default class BufferTransform {
|
|
|
71
84
|
}
|
|
72
85
|
|
|
73
86
|
// Delete owned resources.
|
|
74
|
-
delete() {
|
|
87
|
+
delete(): void {
|
|
75
88
|
for (const name in this.resources) {
|
|
76
89
|
this.resources[name].delete();
|
|
77
90
|
}
|
|
@@ -79,7 +92,7 @@ export default class BufferTransform {
|
|
|
79
92
|
|
|
80
93
|
// Private
|
|
81
94
|
|
|
82
|
-
_initialize(props = {}) {
|
|
95
|
+
_initialize(props: TransformProps = {}): void {
|
|
83
96
|
this._setupBuffers(props);
|
|
84
97
|
this.varyings = props.varyings || Object.keys(this.bindings[this.currentIndex].feedbackBuffers);
|
|
85
98
|
if (this.varyings.length > 0) {
|
|
@@ -125,13 +138,15 @@ export default class BufferTransform {
|
|
|
125
138
|
}
|
|
126
139
|
|
|
127
140
|
_setupBuffers(props = {}) {
|
|
128
|
-
|
|
129
|
-
|
|
141
|
+
// @ts-expect-error
|
|
142
|
+
const {sourceBuffers = null} = props;
|
|
143
|
+
// @ts-expect-error
|
|
144
|
+
Object.assign(this.feedbackMap, props.feedbackMap);
|
|
130
145
|
const feedbackBuffers = this._getFeedbackBuffers(props);
|
|
131
146
|
this._updateBindings({sourceBuffers, feedbackBuffers});
|
|
132
147
|
}
|
|
133
148
|
|
|
134
|
-
_setupTransformFeedback(binding, {model}) {
|
|
149
|
+
_setupTransformFeedback(binding, {model}): void {
|
|
135
150
|
const {program} = model;
|
|
136
151
|
binding.transformFeedback = new TransformFeedback(this.gl, {
|
|
137
152
|
program,
|
|
@@ -139,7 +154,7 @@ export default class BufferTransform {
|
|
|
139
154
|
});
|
|
140
155
|
}
|
|
141
156
|
|
|
142
|
-
_updateBindings(opts) {
|
|
157
|
+
_updateBindings(opts): void {
|
|
143
158
|
this.bindings[this.currentIndex] = this._updateBinding(this.bindings[this.currentIndex], opts);
|
|
144
159
|
if (this.feedbackMap) {
|
|
145
160
|
const {sourceBuffers, feedbackBuffers} = this._swapBuffers(this.bindings[this.currentIndex]);
|
|
@@ -166,7 +181,7 @@ export default class BufferTransform {
|
|
|
166
181
|
return binding;
|
|
167
182
|
}
|
|
168
183
|
|
|
169
|
-
_swapBuffers(opts) {
|
|
184
|
+
_swapBuffers(opts): {sourceBuffers: any; feedbackBuffers: any} {
|
|
170
185
|
if (!this.feedbackMap) {
|
|
171
186
|
return null;
|
|
172
187
|
}
|
|
@@ -184,7 +199,7 @@ export default class BufferTransform {
|
|
|
184
199
|
}
|
|
185
200
|
|
|
186
201
|
// Create a buffer and add to list of buffers to be deleted.
|
|
187
|
-
_createNewBuffer(name, opts) {
|
|
202
|
+
_createNewBuffer(name, opts): Buffer {
|
|
188
203
|
const buffer = new Buffer(this.gl, opts);
|
|
189
204
|
if (this.resources[name]) {
|
|
190
205
|
this.resources[name].delete();
|
|
@@ -193,7 +208,7 @@ export default class BufferTransform {
|
|
|
193
208
|
return buffer;
|
|
194
209
|
}
|
|
195
210
|
|
|
196
|
-
_getNextIndex() {
|
|
211
|
+
_getNextIndex(): number {
|
|
197
212
|
return (this.currentIndex + 1) % 2;
|
|
198
213
|
}
|
|
199
214
|
}
|
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
/** @typedef {import('./transform').TransformProps} TransformProps */
|
|
2
1
|
import GL from '@luma.gl/constants';
|
|
3
2
|
|
|
4
|
-
import {
|
|
5
|
-
cloneTextureFrom,
|
|
6
|
-
readPixelsToArray,
|
|
7
|
-
getShaderVersion,
|
|
8
|
-
Buffer,
|
|
9
|
-
Texture2D,
|
|
10
|
-
Framebuffer
|
|
11
|
-
} from '@luma.gl/webgl';
|
|
3
|
+
import {cloneTextureFrom, readPixelsToArray, Buffer, Texture2D, Framebuffer} from '@luma.gl/webgl';
|
|
12
4
|
|
|
13
5
|
import {
|
|
14
6
|
_transform as transformModule,
|
|
7
|
+
getShaderInfo,
|
|
15
8
|
getPassthroughFS,
|
|
16
9
|
typeToChannelCount,
|
|
17
10
|
combineInjects
|
|
@@ -19,6 +12,8 @@ import {
|
|
|
19
12
|
|
|
20
13
|
import {updateForTextures, getSizeUniforms} from './transform-shader-utils';
|
|
21
14
|
|
|
15
|
+
import type {TransformProps, TransformDrawOptions} from './transform-types';
|
|
16
|
+
|
|
22
17
|
// TODO: move these constants to transform-shader-utils
|
|
23
18
|
// Texture parameters needed so sample can precisely pick pixel for given element id.
|
|
24
19
|
const SRC_TEX_PARAMETER_OVERRIDES = {
|
|
@@ -30,7 +25,24 @@ const SRC_TEX_PARAMETER_OVERRIDES = {
|
|
|
30
25
|
const FS_OUTPUT_VARIABLE = 'transform_output';
|
|
31
26
|
|
|
32
27
|
export default class TextureTransform {
|
|
33
|
-
|
|
28
|
+
gl: WebGL2RenderingContext;
|
|
29
|
+
id = 0;
|
|
30
|
+
currentIndex = 0;
|
|
31
|
+
_swapTexture = null;
|
|
32
|
+
targetTextureVarying = null;
|
|
33
|
+
targetTextureType = null;
|
|
34
|
+
samplerTextureMap = null;
|
|
35
|
+
bindings = []; // each element is an object : {sourceTextures, targetTexture, framebuffer}
|
|
36
|
+
resources = {}; // resources to be deleted
|
|
37
|
+
|
|
38
|
+
hasTargetTexture: boolean = false;
|
|
39
|
+
hasSourceTextures: boolean = false;
|
|
40
|
+
ownTexture: Texture2D | null = null;
|
|
41
|
+
elementIDBuffer: Buffer | null = null;
|
|
42
|
+
_targetRefTexName: string;
|
|
43
|
+
elementCount: number;
|
|
44
|
+
|
|
45
|
+
constructor(gl: WebGL2RenderingContext, props: TransformProps = {}) {
|
|
34
46
|
this.gl = gl;
|
|
35
47
|
this.id = this.currentIndex = 0;
|
|
36
48
|
this._swapTexture = null;
|
|
@@ -45,15 +57,14 @@ export default class TextureTransform {
|
|
|
45
57
|
Object.seal(this);
|
|
46
58
|
}
|
|
47
59
|
|
|
48
|
-
updateModelProps(props = {}) {
|
|
60
|
+
updateModelProps(props: TransformProps = {}) {
|
|
49
61
|
const updatedModelProps = this._processVertexShader(props);
|
|
50
62
|
return Object.assign({}, props, updatedModelProps);
|
|
51
63
|
}
|
|
52
64
|
|
|
53
|
-
getDrawOptions(opts = {}) {
|
|
54
|
-
const {sourceBuffers, sourceTextures, framebuffer, targetTexture} =
|
|
55
|
-
this.currentIndex
|
|
56
|
-
];
|
|
65
|
+
getDrawOptions(opts: TransformProps = {}): TransformDrawOptions {
|
|
66
|
+
const {sourceBuffers, sourceTextures, framebuffer, targetTexture} =
|
|
67
|
+
this.bindings[this.currentIndex];
|
|
57
68
|
|
|
58
69
|
const attributes = Object.assign({}, sourceBuffers, opts.attributes);
|
|
59
70
|
const uniforms = Object.assign({}, opts.uniforms);
|
|
@@ -76,7 +87,6 @@ export default class TextureTransform {
|
|
|
76
87
|
});
|
|
77
88
|
Object.assign(uniforms, sizeUniforms);
|
|
78
89
|
}
|
|
79
|
-
|
|
80
90
|
if (this.hasTargetTexture) {
|
|
81
91
|
discard = false;
|
|
82
92
|
parameters.viewport = [0, 0, framebuffer.width, framebuffer.height];
|
|
@@ -115,7 +125,7 @@ export default class TextureTransform {
|
|
|
115
125
|
// readPixels returns 4 elements for each pixel, pack the elements when requested
|
|
116
126
|
const ArrayType = pixels.constructor;
|
|
117
127
|
const channelCount = typeToChannelCount(this.targetTextureType);
|
|
118
|
-
// @ts-
|
|
128
|
+
// @ts-expect-error
|
|
119
129
|
const packedPixels = new ArrayType((pixels.length * channelCount) / 4);
|
|
120
130
|
let packCount = 0;
|
|
121
131
|
for (let i = 0; i < pixels.length; i += 4) {
|
|
@@ -144,11 +154,11 @@ export default class TextureTransform {
|
|
|
144
154
|
|
|
145
155
|
// Private
|
|
146
156
|
|
|
147
|
-
_initialize(props = {}) {
|
|
157
|
+
_initialize(props: TransformProps = {}) {
|
|
148
158
|
const {_targetTextureVarying, _swapTexture} = props;
|
|
149
159
|
this._swapTexture = _swapTexture;
|
|
150
160
|
this.targetTextureVarying = _targetTextureVarying;
|
|
151
|
-
this.hasTargetTexture = _targetTextureVarying;
|
|
161
|
+
this.hasTargetTexture = Boolean(_targetTextureVarying);
|
|
152
162
|
this._setupTextures(props);
|
|
153
163
|
}
|
|
154
164
|
|
|
@@ -171,8 +181,7 @@ export default class TextureTransform {
|
|
|
171
181
|
return this._createNewTexture(refTexture);
|
|
172
182
|
}
|
|
173
183
|
|
|
174
|
-
|
|
175
|
-
_setupTextures(props = {}) {
|
|
184
|
+
_setupTextures(props: TransformProps = {}) {
|
|
176
185
|
const {sourceBuffers, _sourceTextures = {}, _targetTexture} = props;
|
|
177
186
|
const targetTexture = this._createTargetTexture({
|
|
178
187
|
sourceTextures: _sourceTextures,
|
|
@@ -186,7 +195,7 @@ export default class TextureTransform {
|
|
|
186
195
|
}
|
|
187
196
|
}
|
|
188
197
|
|
|
189
|
-
_updateElementIDBuffer(elementCount) {
|
|
198
|
+
_updateElementIDBuffer(elementCount: number): void {
|
|
190
199
|
if (typeof elementCount !== 'number' || this.elementCount >= elementCount) {
|
|
191
200
|
return;
|
|
192
201
|
}
|
|
@@ -305,9 +314,9 @@ export default class TextureTransform {
|
|
|
305
314
|
}
|
|
306
315
|
|
|
307
316
|
// build and return shader releated parameters
|
|
308
|
-
_processVertexShader(props = {}) {
|
|
317
|
+
_processVertexShader(props: TransformProps = {}) {
|
|
309
318
|
const {sourceTextures, targetTexture} = this.bindings[this.currentIndex];
|
|
310
|
-
// @ts-
|
|
319
|
+
// @ts-expect-error TODO - uniforms is not present
|
|
311
320
|
const {vs, uniforms, targetTextureType, inject, samplerTextureMap} = updateForTextures({
|
|
312
321
|
vs: props.vs,
|
|
313
322
|
sourceTextureMap: sourceTextures,
|
|
@@ -320,13 +329,14 @@ export default class TextureTransform {
|
|
|
320
329
|
const fs =
|
|
321
330
|
props._fs ||
|
|
322
331
|
getPassthroughFS({
|
|
323
|
-
version:
|
|
332
|
+
version: getShaderInfo(vs).version,
|
|
324
333
|
input: this.targetTextureVarying,
|
|
325
334
|
inputType: targetTextureType,
|
|
326
335
|
output: FS_OUTPUT_VARIABLE
|
|
327
336
|
});
|
|
328
337
|
const modules =
|
|
329
338
|
this.hasSourceTextures || this.targetTextureVarying
|
|
339
|
+
// @ts-expect-error
|
|
330
340
|
? [transformModule].concat(props.modules || [])
|
|
331
341
|
: props.modules;
|
|
332
342
|
return {vs, fs, modules, uniforms, inject: combinedInject};
|
|
@@ -8,7 +8,18 @@ const VS_POS_VARIABLE = 'transform_position';
|
|
|
8
8
|
// Scan provided vertex shader
|
|
9
9
|
// for each texture attribute, inject sampler instructions and build uniforms for sampler
|
|
10
10
|
// for texture target, get varying type and inject position instruction
|
|
11
|
-
export function updateForTextures(
|
|
11
|
+
export function updateForTextures(options: {
|
|
12
|
+
vs: any;
|
|
13
|
+
sourceTextureMap: any;
|
|
14
|
+
targetTextureVarying: any;
|
|
15
|
+
targetTexture: any;
|
|
16
|
+
}): {
|
|
17
|
+
vs: any;
|
|
18
|
+
targetTextureType: any;
|
|
19
|
+
inject: {};
|
|
20
|
+
samplerTextureMap: {};
|
|
21
|
+
} {
|
|
22
|
+
const {vs, sourceTextureMap, targetTextureVarying, targetTexture} = options;
|
|
12
23
|
const texAttributeNames = Object.keys(sourceTextureMap);
|
|
13
24
|
let sourceCount = texAttributeNames.length;
|
|
14
25
|
let targetTextureType = null;
|
|
@@ -67,46 +78,47 @@ export function updateForTextures({vs, sourceTextureMap, targetTextureVarying, t
|
|
|
67
78
|
}
|
|
68
79
|
|
|
69
80
|
// builds and returns an object contaning size uniform for each texture
|
|
70
|
-
export function getSizeUniforms(
|
|
81
|
+
export function getSizeUniforms(options: {
|
|
82
|
+
sourceTextureMap: any;
|
|
83
|
+
targetTextureVarying: any;
|
|
84
|
+
targetTexture: any;
|
|
85
|
+
}): {} {
|
|
71
86
|
const uniforms = {};
|
|
72
87
|
let width;
|
|
73
88
|
let height;
|
|
74
|
-
if (targetTextureVarying) {
|
|
75
|
-
({width, height} = targetTexture);
|
|
76
|
-
uniforms[`${SIZE_UNIFORM_PREFIX}${targetTextureVarying}`] = [width, height];
|
|
89
|
+
if (options.targetTextureVarying) {
|
|
90
|
+
({width, height} = options.targetTexture);
|
|
91
|
+
uniforms[`${SIZE_UNIFORM_PREFIX}${options.targetTextureVarying}`] = [width, height];
|
|
77
92
|
}
|
|
78
|
-
for (const textureName in sourceTextureMap) {
|
|
79
|
-
({width, height} = sourceTextureMap[textureName]);
|
|
93
|
+
for (const textureName in options.sourceTextureMap) {
|
|
94
|
+
({width, height} = options.sourceTextureMap[textureName]);
|
|
80
95
|
uniforms[`${SIZE_UNIFORM_PREFIX}${textureName}`] = [width, height];
|
|
81
96
|
}
|
|
82
97
|
return uniforms;
|
|
83
98
|
}
|
|
84
99
|
|
|
85
|
-
// Checks if provided line is defining an attribute, if so returns details otherwise null
|
|
86
|
-
function getAttributeDefinition(line) {
|
|
87
|
-
return getQualifierDetails(line, ['attribute', 'in']);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
function getSamplerDeclerations(textureName) {
|
|
91
|
-
const samplerName = `${SAMPLER_UNIFORM_PREFIX}${textureName}`;
|
|
92
|
-
const sizeName = `${SIZE_UNIFORM_PREFIX}${textureName}`;
|
|
93
|
-
const uniformDeclerations = `\
|
|
94
|
-
uniform sampler2D ${samplerName};
|
|
95
|
-
uniform vec2 ${sizeName};`;
|
|
96
|
-
return {samplerName, sizeName, uniformDeclerations};
|
|
97
|
-
}
|
|
98
|
-
|
|
99
100
|
// Return size (float, vec2 etc) of a given varying, null if doens't exist.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
|
|
102
|
+
export function getVaryingType(line: any, varying: any): any {
|
|
103
|
+
const qualiferDetails = getQualifierDetails(line, ['varying', 'out']);
|
|
104
|
+
if (!qualiferDetails) {
|
|
103
105
|
return null;
|
|
104
106
|
}
|
|
105
|
-
return
|
|
107
|
+
return qualiferDetails.name === varying ? qualiferDetails.type : null;
|
|
106
108
|
}
|
|
107
109
|
|
|
108
110
|
// build required definitions, sample instructions for each texture attribute
|
|
109
|
-
export function processAttributeDefinition(
|
|
111
|
+
export function processAttributeDefinition(
|
|
112
|
+
line: any,
|
|
113
|
+
textureMap: any
|
|
114
|
+
): {
|
|
115
|
+
updatedLine: string;
|
|
116
|
+
inject: {
|
|
117
|
+
'vs:#decl': string;
|
|
118
|
+
'vs:#main-start': string;
|
|
119
|
+
};
|
|
120
|
+
samplerTextureMap: {};
|
|
121
|
+
} {
|
|
110
122
|
const samplerTextureMap = {};
|
|
111
123
|
const attributeData = getAttributeDefinition(line);
|
|
112
124
|
if (!attributeData) {
|
|
@@ -116,7 +128,7 @@ export function processAttributeDefinition(line, textureMap) {
|
|
|
116
128
|
if (name && textureMap[name]) {
|
|
117
129
|
// eslint-disable-next-line no-useless-escape
|
|
118
130
|
const updatedLine = `\// ${line} => Replaced by Transform with a sampler`;
|
|
119
|
-
const {samplerName, sizeName, uniformDeclerations} =
|
|
131
|
+
const {samplerName, sizeName, uniformDeclerations} = getSamplerDeclarations(name);
|
|
120
132
|
|
|
121
133
|
const channels = typeToChannelSuffix(type);
|
|
122
134
|
const sampleInstruction = ` ${type} ${name} = transform_getInput(${samplerName}, ${sizeName}).${channels};\n`;
|
|
@@ -139,3 +151,19 @@ export function processAttributeDefinition(line, textureMap) {
|
|
|
139
151
|
}
|
|
140
152
|
return null;
|
|
141
153
|
}
|
|
154
|
+
|
|
155
|
+
// HELPERS
|
|
156
|
+
|
|
157
|
+
// Checks if provided line is defining an attribute, if so returns details otherwise null
|
|
158
|
+
function getAttributeDefinition(line) {
|
|
159
|
+
return getQualifierDetails(line, ['attribute', 'in']);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function getSamplerDeclarations(textureName) {
|
|
163
|
+
const samplerName = `${SAMPLER_UNIFORM_PREFIX}${textureName}`;
|
|
164
|
+
const sizeName = `${SIZE_UNIFORM_PREFIX}${textureName}`;
|
|
165
|
+
const uniformDeclerations = `\
|
|
166
|
+
uniform sampler2D ${samplerName};
|
|
167
|
+
uniform vec2 ${sizeName};`;
|
|
168
|
+
return {samplerName, sizeName, uniformDeclerations};
|
|
169
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** Properties for creating Transforms */
|
|
2
|
+
export type TransformProps = {
|
|
3
|
+
id?: string;
|
|
4
|
+
vs?: string;
|
|
5
|
+
elementCount?: number;
|
|
6
|
+
sourceBuffers?: object;
|
|
7
|
+
feedbackBuffers?: object;
|
|
8
|
+
varyings?: string[];
|
|
9
|
+
feedbackMap?: object;
|
|
10
|
+
modules?: object[]; // TODO use ShaderModule type
|
|
11
|
+
attributes?: any;
|
|
12
|
+
uniforms?: any;
|
|
13
|
+
parameters?: any;
|
|
14
|
+
discard?: boolean;
|
|
15
|
+
isIndexed?: boolean;
|
|
16
|
+
_sourceTextures?: any;
|
|
17
|
+
_targetTexture?: any;
|
|
18
|
+
_targetTextureVarying?: string;
|
|
19
|
+
_swapTexture?: string;
|
|
20
|
+
_fs?: string;
|
|
21
|
+
fs?: string;
|
|
22
|
+
inject?: any;
|
|
23
|
+
drawMode?: number;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/** Options that can be provided when running a Transform */
|
|
27
|
+
export type TransformRunOptions = {
|
|
28
|
+
clearRenderTarget?: boolean;
|
|
29
|
+
uniforms: Record<string, any>;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/** Options that control drawing a Transform. Used by subclasses to return draw parameters */
|
|
33
|
+
export type TransformDrawOptions = {
|
|
34
|
+
attributes?: object;
|
|
35
|
+
framebuffer?: any;
|
|
36
|
+
uniforms?: object;
|
|
37
|
+
discard?: boolean;
|
|
38
|
+
parameters?: object;
|
|
39
|
+
transformFeedback?: any;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export type TransformBinding = {sourceBuffers, feedbackBuffers, transformFeedback};
|