@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
|
@@ -11,8 +11,8 @@ const GLTF_TO_LUMA_ATTRIBUTE_MAP = {
|
|
|
11
11
|
TEXCOORD_2: 'texCoords2'
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
-
export function getBuffersFromGeometry(gl, geometry, options) {
|
|
15
|
-
const buffers = {};
|
|
14
|
+
export function getBuffersFromGeometry(gl: WebGLRenderingContext, geometry, options?) {
|
|
15
|
+
const buffers: Record<string, Buffer | [Buffer, {}]> = {};
|
|
16
16
|
let indices = geometry.indices;
|
|
17
17
|
|
|
18
18
|
for (const name in geometry.attributes) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
import {Device} from '@luma.gl/api';
|
|
3
3
|
import GL from '@luma.gl/constants';
|
|
4
|
-
import {
|
|
5
|
-
import ProgramManager from './program-manager';
|
|
4
|
+
import type {ProgramProps} from '@luma.gl/webgl';
|
|
6
5
|
import {
|
|
6
|
+
WebGLDevice,
|
|
7
7
|
Program,
|
|
8
8
|
VertexArray,
|
|
9
9
|
clear,
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
getDebugTableForVertexArray,
|
|
20
20
|
getDebugTableForProgramConfiguration
|
|
21
21
|
} from '@luma.gl/webgl';
|
|
22
|
+
import ProgramManager from './program-manager';
|
|
22
23
|
import {getBuffersFromGeometry} from './model-utils';
|
|
23
24
|
|
|
24
25
|
const LOG_DRAW_PRIORITY = 2;
|
|
@@ -29,23 +30,149 @@ const ERR_MODEL_PARAMS = 'Model needs drawMode and vertexCount';
|
|
|
29
30
|
const NOOP = () => {};
|
|
30
31
|
const DRAW_PARAMS = {};
|
|
31
32
|
|
|
33
|
+
export type ModelProps = ProgramProps & {
|
|
34
|
+
id?: string;
|
|
35
|
+
|
|
36
|
+
// program props
|
|
37
|
+
// vs,
|
|
38
|
+
// fs,
|
|
39
|
+
// varyings,
|
|
40
|
+
// bufferMode,
|
|
41
|
+
|
|
42
|
+
program?: Program;
|
|
43
|
+
modules?: any[];
|
|
44
|
+
defines?: Record<string, number | boolean>;
|
|
45
|
+
inject?: Record<string, any>;
|
|
46
|
+
transpileToGLSL100?: boolean;
|
|
47
|
+
|
|
48
|
+
moduleSettings?: object; // UniformsOptions
|
|
49
|
+
attributes?: object;
|
|
50
|
+
uniforms?: object; // Uniforms
|
|
51
|
+
geometry?: object; // Geometry
|
|
52
|
+
vertexCount?: number
|
|
53
|
+
drawMode?: number
|
|
54
|
+
isInstanced?: boolean
|
|
55
|
+
instanceCount?: number
|
|
56
|
+
programManager?: ProgramManager
|
|
57
|
+
onBeforeRender?: () => void
|
|
58
|
+
onAfterRender?: () => void
|
|
59
|
+
_feedbackBuffers?: object; // FeedbackBuffers
|
|
60
|
+
|
|
61
|
+
// Deprecated?
|
|
62
|
+
isIndexed?: boolean;
|
|
63
|
+
indexType?;
|
|
64
|
+
indexOffset?: number;
|
|
65
|
+
vertexArrayInstanced?: boolean;
|
|
66
|
+
|
|
67
|
+
/** @deprecated Use isInstanced */
|
|
68
|
+
instanced?: boolean
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
export type ModelDrawOptions = {
|
|
73
|
+
moduleSettings?;
|
|
74
|
+
framebuffer?;
|
|
75
|
+
uniforms?;
|
|
76
|
+
attributes?;
|
|
77
|
+
transformFeedback?;
|
|
78
|
+
parameters?;
|
|
79
|
+
vertexArray?;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/* TODO - from autogenerated declarations, copy types and delete
|
|
83
|
+
interface ModelProps extends ProgramProps {
|
|
84
|
+
id?: string
|
|
85
|
+
moduleSettings?: UniformsOptions
|
|
86
|
+
uniforms?: Uniforms
|
|
87
|
+
geometry?: Geometry
|
|
88
|
+
vertexCount?: number
|
|
89
|
+
drawMode?: number
|
|
90
|
+
programManager?: ProgramManager
|
|
91
|
+
onBeforeRender?: () => void
|
|
92
|
+
onAfterRender?: () => void
|
|
93
|
+
_feedbackBuffers?: FeedbackBuffers
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
interface DrawOpts {
|
|
97
|
+
moduleSettings?: UniformsOptions
|
|
98
|
+
framebuffer: Framebuffer
|
|
99
|
+
uniforms?: Uniforms
|
|
100
|
+
attributes?: Attributes
|
|
101
|
+
parameters?: Parameters
|
|
102
|
+
transformFeedback?: TransformFeedback
|
|
103
|
+
vertexArray?: VertexArray
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
interface ClearOpts {
|
|
107
|
+
framebuffer?: Framebuffer
|
|
108
|
+
color?: boolean
|
|
109
|
+
depth?: boolean
|
|
110
|
+
stencil?: boolean
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
interface TransformOpts extends DrawOpts {
|
|
114
|
+
discard: boolean
|
|
115
|
+
feedbackBuffers: FeedbackBuffers
|
|
116
|
+
unbindModels: Array<Model>
|
|
117
|
+
parameters: Parameters
|
|
118
|
+
}
|
|
119
|
+
*/
|
|
120
|
+
|
|
32
121
|
export default class Model {
|
|
33
|
-
|
|
122
|
+
readonly device: Device;
|
|
123
|
+
readonly gl: WebGLRenderingContext;
|
|
124
|
+
|
|
125
|
+
readonly id: string;
|
|
126
|
+
readonly animated: boolean = false;
|
|
127
|
+
programManager: ProgramManager;
|
|
128
|
+
vertexCount: number;
|
|
129
|
+
|
|
130
|
+
lastLogTime: number = 0; // TODO - move to probe.gl
|
|
131
|
+
|
|
132
|
+
props: ModelProps;
|
|
133
|
+
userData: Record<string, any> = {};
|
|
134
|
+
needsRedraw: boolean = true;
|
|
135
|
+
attributes: Record<string, any> = {};
|
|
136
|
+
_attributes: Record<string, any> = {};
|
|
137
|
+
uniforms: Record<string, any> = {};
|
|
138
|
+
|
|
139
|
+
drawMode;
|
|
140
|
+
instanceCount: number;
|
|
141
|
+
pickable: boolean = true;
|
|
142
|
+
|
|
143
|
+
programProps: ProgramProps & {program?: Program; modules; inject; defines; varyings; bufferMode; transpileToGLSL100;};
|
|
144
|
+
vertexArray: VertexArray;
|
|
145
|
+
program: Program;
|
|
146
|
+
transformFeedback: TransformFeedback | undefined;
|
|
147
|
+
_programDirty = true;
|
|
148
|
+
_programManagerState;
|
|
149
|
+
_managedProgram;
|
|
150
|
+
|
|
151
|
+
// Track buffers created by setGeometry
|
|
152
|
+
geometryBuffers = {};
|
|
153
|
+
// geometry might have set drawMode and vertexCount
|
|
154
|
+
isInstanced: boolean;
|
|
155
|
+
// TODO - just to unbreak deck.gl 7.0-beta, remove as soon as updated
|
|
156
|
+
geometry = {};
|
|
157
|
+
|
|
158
|
+
constructor(device: Device, props?: ModelProps);
|
|
159
|
+
/* @deprecated */
|
|
160
|
+
constructor(gl: WebGLRenderingContext, props?: ModelProps);
|
|
161
|
+
constructor(device, props: ModelProps = {}) {
|
|
34
162
|
// Deduce a helpful id
|
|
35
163
|
const {id = uid('model')} = props;
|
|
36
|
-
assert(isWebGL(gl));
|
|
37
164
|
this.id = id;
|
|
38
|
-
|
|
165
|
+
const webglDevice = WebGLDevice.attach(device);
|
|
166
|
+
this.device = webglDevice;
|
|
167
|
+
this.gl = webglDevice.gl;
|
|
39
168
|
this.id = props.id || uid('Model');
|
|
40
|
-
this.lastLogTime = 0; // TODO - move to probe.gl
|
|
41
|
-
this.animated = false;
|
|
42
169
|
this.initialize(props);
|
|
43
170
|
}
|
|
44
171
|
|
|
45
|
-
initialize(props) {
|
|
172
|
+
initialize(props: ModelProps) {
|
|
46
173
|
this.props = {};
|
|
47
174
|
|
|
48
|
-
this.programManager = props.programManager || ProgramManager.getDefaultProgramManager(this.
|
|
175
|
+
this.programManager = props.programManager || ProgramManager.getDefaultProgramManager(this.device);
|
|
49
176
|
this._programManagerState = -1;
|
|
50
177
|
this._managedProgram = false;
|
|
51
178
|
|
|
@@ -63,9 +190,9 @@ export default class Model {
|
|
|
63
190
|
|
|
64
191
|
this.programProps = {
|
|
65
192
|
program,
|
|
193
|
+
modules,
|
|
66
194
|
vs,
|
|
67
195
|
fs,
|
|
68
|
-
modules,
|
|
69
196
|
defines,
|
|
70
197
|
inject,
|
|
71
198
|
varyings,
|
|
@@ -122,7 +249,7 @@ export default class Model {
|
|
|
122
249
|
this._setModelProps(props);
|
|
123
250
|
}
|
|
124
251
|
|
|
125
|
-
|
|
252
|
+
destroy(): void {
|
|
126
253
|
// delete all attributes created by this model
|
|
127
254
|
// TODO - should buffer deletes be handled by vertex array?
|
|
128
255
|
for (const key in this._attributes) {
|
|
@@ -141,17 +268,22 @@ export default class Model {
|
|
|
141
268
|
this._deleteGeometryBuffers();
|
|
142
269
|
}
|
|
143
270
|
|
|
271
|
+
/** @deprecated Use .destroy() */
|
|
272
|
+
delete(): void {
|
|
273
|
+
this.destroy();
|
|
274
|
+
}
|
|
275
|
+
|
|
144
276
|
// GETTERS
|
|
145
277
|
|
|
146
278
|
getDrawMode() {
|
|
147
279
|
return this.drawMode;
|
|
148
280
|
}
|
|
149
281
|
|
|
150
|
-
getVertexCount() {
|
|
282
|
+
getVertexCount(): number {
|
|
151
283
|
return this.vertexCount;
|
|
152
284
|
}
|
|
153
285
|
|
|
154
|
-
getInstanceCount() {
|
|
286
|
+
getInstanceCount(): number {
|
|
155
287
|
return this.instanceCount;
|
|
156
288
|
}
|
|
157
289
|
|
|
@@ -159,22 +291,13 @@ export default class Model {
|
|
|
159
291
|
return this.attributes;
|
|
160
292
|
}
|
|
161
293
|
|
|
162
|
-
getProgram() {
|
|
294
|
+
getProgram(): Program {
|
|
163
295
|
return this.program;
|
|
164
296
|
}
|
|
165
297
|
|
|
166
|
-
setProgram(props) {
|
|
167
|
-
const {
|
|
168
|
-
|
|
169
|
-
vs,
|
|
170
|
-
fs,
|
|
171
|
-
modules,
|
|
172
|
-
defines,
|
|
173
|
-
inject,
|
|
174
|
-
varyings,
|
|
175
|
-
bufferMode,
|
|
176
|
-
transpileToGLSL100
|
|
177
|
-
} = props;
|
|
298
|
+
setProgram(props): void {
|
|
299
|
+
const {program, vs, fs, modules, defines, inject, varyings, bufferMode, transpileToGLSL100} =
|
|
300
|
+
props;
|
|
178
301
|
this.programProps = {
|
|
179
302
|
program,
|
|
180
303
|
vs,
|
|
@@ -195,24 +318,24 @@ export default class Model {
|
|
|
195
318
|
|
|
196
319
|
// SETTERS
|
|
197
320
|
|
|
198
|
-
setDrawMode(drawMode) {
|
|
321
|
+
setDrawMode(drawMode): this {
|
|
199
322
|
this.drawMode = drawMode;
|
|
200
323
|
return this;
|
|
201
324
|
}
|
|
202
325
|
|
|
203
|
-
setVertexCount(vertexCount) {
|
|
326
|
+
setVertexCount(vertexCount): this {
|
|
204
327
|
assert(Number.isFinite(vertexCount));
|
|
205
328
|
this.vertexCount = vertexCount;
|
|
206
329
|
return this;
|
|
207
330
|
}
|
|
208
331
|
|
|
209
|
-
setInstanceCount(instanceCount) {
|
|
332
|
+
setInstanceCount(instanceCount): this {
|
|
210
333
|
assert(Number.isFinite(instanceCount));
|
|
211
334
|
this.instanceCount = instanceCount;
|
|
212
335
|
return this;
|
|
213
336
|
}
|
|
214
337
|
|
|
215
|
-
setGeometry(geometry) {
|
|
338
|
+
setGeometry(geometry): this {
|
|
216
339
|
this.drawMode = geometry.drawMode;
|
|
217
340
|
this.vertexCount = geometry.getVertexCount();
|
|
218
341
|
|
|
@@ -223,7 +346,7 @@ export default class Model {
|
|
|
223
346
|
return this;
|
|
224
347
|
}
|
|
225
348
|
|
|
226
|
-
setAttributes(attributes = {}) {
|
|
349
|
+
setAttributes(attributes = {}): this {
|
|
227
350
|
// Avoid setting needsRedraw if no attributes
|
|
228
351
|
if (isObjectEmpty(attributes)) {
|
|
229
352
|
return this;
|
|
@@ -242,13 +365,12 @@ export default class Model {
|
|
|
242
365
|
}
|
|
243
366
|
|
|
244
367
|
// TODO - should actually set the uniforms
|
|
245
|
-
setUniforms(uniforms = {}) {
|
|
368
|
+
setUniforms(uniforms = {}): this {
|
|
246
369
|
Object.assign(this.uniforms, uniforms);
|
|
247
|
-
|
|
248
370
|
return this;
|
|
249
371
|
}
|
|
250
372
|
|
|
251
|
-
getModuleUniforms(opts) {
|
|
373
|
+
getModuleUniforms(opts?) {
|
|
252
374
|
this._checkProgram();
|
|
253
375
|
|
|
254
376
|
const getUniforms = this.programManager.getUniforms(this.program);
|
|
@@ -260,19 +382,19 @@ export default class Model {
|
|
|
260
382
|
return {};
|
|
261
383
|
}
|
|
262
384
|
|
|
263
|
-
updateModuleSettings(opts) {
|
|
385
|
+
updateModuleSettings(opts?): this {
|
|
264
386
|
const uniforms = this.getModuleUniforms(opts || {});
|
|
265
387
|
return this.setUniforms(uniforms);
|
|
266
388
|
}
|
|
267
389
|
|
|
268
390
|
// DRAW CALLS
|
|
269
391
|
|
|
270
|
-
clear(opts) {
|
|
392
|
+
clear(opts): this {
|
|
271
393
|
clear(this.program.gl, opts);
|
|
272
394
|
return this;
|
|
273
395
|
}
|
|
274
396
|
|
|
275
|
-
draw(opts = {}) {
|
|
397
|
+
draw(opts: ModelDrawOptions = {}): boolean {
|
|
276
398
|
// Lazy update program and vertex array
|
|
277
399
|
this._checkProgram();
|
|
278
400
|
|
|
@@ -344,8 +466,9 @@ export default class Model {
|
|
|
344
466
|
return didDraw;
|
|
345
467
|
}
|
|
346
468
|
|
|
347
|
-
// Draw call for transform feedback
|
|
348
|
-
transform(opts = {}) {
|
|
469
|
+
// Draw call for transform feedback, TBD...
|
|
470
|
+
transform(opts: ModelDrawOptions = {}): this {
|
|
471
|
+
// @ts-expect-error
|
|
349
472
|
const {discard = true, feedbackBuffers, unbindModels = []} = opts;
|
|
350
473
|
|
|
351
474
|
let {parameters} = opts;
|
|
@@ -358,11 +481,11 @@ export default class Model {
|
|
|
358
481
|
parameters = Object.assign({}, parameters, {[GL.RASTERIZER_DISCARD]: discard});
|
|
359
482
|
}
|
|
360
483
|
|
|
361
|
-
unbindModels.forEach(model => model.vertexArray.unbindBuffers());
|
|
484
|
+
unbindModels.forEach((model) => model.vertexArray.unbindBuffers());
|
|
362
485
|
try {
|
|
363
486
|
this.draw(Object.assign({}, opts, {parameters}));
|
|
364
487
|
} finally {
|
|
365
|
-
unbindModels.forEach(model => model.vertexArray.bindBuffers());
|
|
488
|
+
unbindModels.forEach((model) => model.vertexArray.bindBuffers());
|
|
366
489
|
}
|
|
367
490
|
|
|
368
491
|
return this;
|
|
@@ -370,14 +493,14 @@ export default class Model {
|
|
|
370
493
|
|
|
371
494
|
// DEPRECATED METHODS
|
|
372
495
|
|
|
373
|
-
render(uniforms = {}) {
|
|
496
|
+
render(uniforms = {}): boolean {
|
|
374
497
|
log.warn('Model.render() is deprecated. Use Model.setUniforms() and Model.draw()')();
|
|
375
498
|
return this.setUniforms(uniforms).draw();
|
|
376
499
|
}
|
|
377
500
|
|
|
378
501
|
// PRIVATE METHODS
|
|
379
502
|
|
|
380
|
-
_setModelProps(props) {
|
|
503
|
+
_setModelProps(props): void {
|
|
381
504
|
Object.assign(this.props, props);
|
|
382
505
|
|
|
383
506
|
if ('uniforms' in props) {
|
|
@@ -404,7 +527,7 @@ export default class Model {
|
|
|
404
527
|
}
|
|
405
528
|
}
|
|
406
529
|
|
|
407
|
-
_checkProgram() {
|
|
530
|
+
_checkProgram(): void {
|
|
408
531
|
const needsUpdate =
|
|
409
532
|
this._programDirty || this.programManager.stateHash !== this._programManagerState;
|
|
410
533
|
|
|
@@ -417,16 +540,8 @@ export default class Model {
|
|
|
417
540
|
if (program) {
|
|
418
541
|
this._managedProgram = false;
|
|
419
542
|
} else {
|
|
420
|
-
const {
|
|
421
|
-
|
|
422
|
-
fs,
|
|
423
|
-
modules,
|
|
424
|
-
inject,
|
|
425
|
-
defines,
|
|
426
|
-
varyings,
|
|
427
|
-
bufferMode,
|
|
428
|
-
transpileToGLSL100
|
|
429
|
-
} = this.programProps;
|
|
543
|
+
const {vs, fs, modules, inject, defines, varyings, bufferMode, transpileToGLSL100} =
|
|
544
|
+
this.programProps;
|
|
430
545
|
program = this.programManager.get({
|
|
431
546
|
vs,
|
|
432
547
|
fs,
|
|
@@ -455,7 +570,6 @@ export default class Model {
|
|
|
455
570
|
this.program = program;
|
|
456
571
|
|
|
457
572
|
if (this.vertexArray) {
|
|
458
|
-
// @ts-ignore TODO
|
|
459
573
|
this.vertexArray.setProps({program: this.program, attributes: this.vertexArray.attributes});
|
|
460
574
|
} else {
|
|
461
575
|
this.vertexArray = new VertexArray(this.gl, {program: this.program});
|
|
@@ -470,19 +584,19 @@ export default class Model {
|
|
|
470
584
|
);
|
|
471
585
|
}
|
|
472
586
|
|
|
473
|
-
_deleteGeometryBuffers() {
|
|
587
|
+
_deleteGeometryBuffers(): void {
|
|
474
588
|
for (const name in this.geometryBuffers) {
|
|
475
589
|
// Buffer is raw value (for indices) or first element of [buffer, accessor] pair
|
|
476
590
|
const buffer = this.geometryBuffers[name][0] || this.geometryBuffers[name];
|
|
477
591
|
if (buffer instanceof Buffer) {
|
|
478
|
-
buffer.
|
|
592
|
+
buffer.destroy();
|
|
479
593
|
}
|
|
480
594
|
}
|
|
481
595
|
}
|
|
482
596
|
|
|
483
597
|
// Updates (evaluates) all function valued uniforms based on a new set of animationProps
|
|
484
598
|
// experimental
|
|
485
|
-
_setAnimationProps(animationProps) {
|
|
599
|
+
_setAnimationProps(animationProps): void {
|
|
486
600
|
if (this.animated) {
|
|
487
601
|
assert(animationProps, 'Model.draw(): animated uniforms but no animationProps');
|
|
488
602
|
// const animatedUniforms = this._evaluateAnimateUniforms(animationProps);
|
|
@@ -492,7 +606,7 @@ export default class Model {
|
|
|
492
606
|
|
|
493
607
|
// Transform Feedback
|
|
494
608
|
|
|
495
|
-
_setFeedbackBuffers(feedbackBuffers = {}) {
|
|
609
|
+
_setFeedbackBuffers(feedbackBuffers = {}): this {
|
|
496
610
|
// Avoid setting needsRedraw if no feedbackBuffers
|
|
497
611
|
if (isObjectEmpty(feedbackBuffers)) {
|
|
498
612
|
return this;
|
|
@@ -509,7 +623,7 @@ export default class Model {
|
|
|
509
623
|
return this;
|
|
510
624
|
}
|
|
511
625
|
|
|
512
|
-
_logDrawCallStart(logLevel) {
|
|
626
|
+
_logDrawCallStart(logLevel: number): number {
|
|
513
627
|
const logDrawTimeout = logLevel > 3 ? 0 : LOG_DRAW_TIMEOUT;
|
|
514
628
|
if (Date.now() - this.lastLogTime < logDrawTimeout) {
|
|
515
629
|
return undefined;
|
|
@@ -522,7 +636,7 @@ export default class Model {
|
|
|
522
636
|
return logLevel;
|
|
523
637
|
}
|
|
524
638
|
|
|
525
|
-
_logDrawCallEnd(logLevel, vertexArray, uniforms, framebuffer) {
|
|
639
|
+
_logDrawCallEnd(logLevel, vertexArray, uniforms, framebuffer?): void {
|
|
526
640
|
// HACK: logLevel === undefined means logDrawCallStart didn't run
|
|
527
641
|
if (logLevel === undefined) {
|
|
528
642
|
return;
|
|
@@ -531,11 +645,15 @@ export default class Model {
|
|
|
531
645
|
const attributeTable = getDebugTableForVertexArray({
|
|
532
646
|
vertexArray,
|
|
533
647
|
header: `${this.id} attributes`,
|
|
534
|
-
// @ts-
|
|
648
|
+
// @ts-expect-error
|
|
535
649
|
attributes: this._attributes
|
|
536
650
|
});
|
|
537
651
|
|
|
538
|
-
const {
|
|
652
|
+
const {
|
|
653
|
+
table: uniformTable,
|
|
654
|
+
unusedTable,
|
|
655
|
+
unusedCount
|
|
656
|
+
} = getDebugTableForUniforms({
|
|
539
657
|
header: `${this.id} uniforms`,
|
|
540
658
|
program: this.program,
|
|
541
659
|
uniforms: Object.assign({}, this.program.uniforms, uniforms)
|
|
@@ -570,6 +688,6 @@ export default class Model {
|
|
|
570
688
|
framebuffer.log({logLevel: LOG_DRAW_PRIORITY, message: `Rendered to ${framebuffer.id}`});
|
|
571
689
|
}
|
|
572
690
|
|
|
573
|
-
log.groupEnd(LOG_DRAW_PRIORITY
|
|
691
|
+
log.groupEnd(LOG_DRAW_PRIORITY)();
|
|
574
692
|
}
|
|
575
693
|
}
|
|
@@ -1,54 +1,70 @@
|
|
|
1
|
+
import {Device} from '@luma.gl/api/';
|
|
1
2
|
import {assembleShaders} from '@luma.gl/shadertools';
|
|
2
3
|
import {Program} from '@luma.gl/webgl';
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
static getDefaultProgramManager(gl) {
|
|
6
|
-
gl.luma = gl.luma || {};
|
|
7
|
-
gl.luma.defaultProgramManager = gl.luma.defaultProgramManager || new ProgramManager(gl);
|
|
8
|
-
|
|
9
|
-
return gl.luma.defaultProgramManager;
|
|
10
|
-
}
|
|
5
|
+
type Module = 'string' | {name: string}; // TODO
|
|
11
6
|
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
type GetProgramOptions = {
|
|
8
|
+
vs?: string,
|
|
9
|
+
fs?: string,
|
|
10
|
+
defines?: {},
|
|
11
|
+
inject?: {},
|
|
12
|
+
varyings?: string[],
|
|
13
|
+
bufferMode?: number,
|
|
14
|
+
modules?: Module[];
|
|
15
|
+
transpileToGLSL100?: boolean
|
|
16
|
+
};
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
export default class ProgramManager {
|
|
19
|
+
readonly device: Device;
|
|
20
|
+
|
|
21
|
+
stateHash = 0; // Used change hashing if hooks are modified
|
|
22
|
+
private _hashCounter = 0;
|
|
23
|
+
private readonly _hashes = {};
|
|
24
|
+
private readonly _useCounts = {};
|
|
25
|
+
|
|
26
|
+
private readonly _programCache = {};
|
|
27
|
+
private readonly _getUniforms = {};
|
|
28
|
+
private readonly _registeredModules = {}; // TODO: Remove? This isn't used anywhere in luma.gl
|
|
29
|
+
private readonly _hookFunctions = [];
|
|
30
|
+
private _defaultModules = [];
|
|
31
|
+
|
|
32
|
+
static getDefaultProgramManager(device: Device): ProgramManager {
|
|
33
|
+
// @ts-expect-error
|
|
34
|
+
device.defaultProgramManager = device.defaultProgramManager || new ProgramManager(device);
|
|
35
|
+
// @ts-expect-error
|
|
36
|
+
return device.defaultProgramManager;
|
|
37
|
+
}
|
|
20
38
|
|
|
21
|
-
|
|
22
|
-
this.
|
|
23
|
-
this.stateHash = 0; // Used change hashing if hooks are modified
|
|
24
|
-
this._useCounts = {};
|
|
39
|
+
constructor(device: Device) {
|
|
40
|
+
this.device = device;
|
|
25
41
|
}
|
|
26
42
|
|
|
27
|
-
addDefaultModule(module) {
|
|
28
|
-
|
|
43
|
+
addDefaultModule(module: Module): void {
|
|
44
|
+
// @ts-expect-error
|
|
45
|
+
if (!this._defaultModules.find((m) => m.name === module.name)) {
|
|
29
46
|
this._defaultModules.push(module);
|
|
30
47
|
}
|
|
31
48
|
|
|
32
49
|
this.stateHash++;
|
|
33
50
|
}
|
|
34
51
|
|
|
35
|
-
removeDefaultModule(module) {
|
|
52
|
+
removeDefaultModule(module: Module): void {
|
|
36
53
|
const moduleName = typeof module === 'string' ? module : module.name;
|
|
37
|
-
this._defaultModules = this._defaultModules.filter(m => m.name !== moduleName);
|
|
54
|
+
this._defaultModules = this._defaultModules.filter((m) => m.name !== moduleName);
|
|
38
55
|
this.stateHash++;
|
|
39
56
|
}
|
|
40
57
|
|
|
41
|
-
addShaderHook(hook, opts) {
|
|
58
|
+
addShaderHook(hook, opts?): void {
|
|
42
59
|
if (opts) {
|
|
43
60
|
hook = Object.assign(opts, {hook});
|
|
44
61
|
}
|
|
45
62
|
|
|
46
63
|
this._hookFunctions.push(hook);
|
|
47
|
-
|
|
48
64
|
this.stateHash++;
|
|
49
65
|
}
|
|
50
66
|
|
|
51
|
-
get(props = {}) {
|
|
67
|
+
get(props: GetProgramOptions = {}): Program {
|
|
52
68
|
const {
|
|
53
69
|
vs = '',
|
|
54
70
|
fs = '',
|
|
@@ -63,8 +79,9 @@ export default class ProgramManager {
|
|
|
63
79
|
|
|
64
80
|
const vsHash = this._getHash(vs);
|
|
65
81
|
const fsHash = this._getHash(fs);
|
|
66
|
-
|
|
67
|
-
const
|
|
82
|
+
// @ts-expect-error
|
|
83
|
+
const moduleHashes = modules.map((m) => this._getHash(m.name)).sort();
|
|
84
|
+
const varyingHashes = varyings.map((v) => this._getHash(v));
|
|
68
85
|
|
|
69
86
|
const defineKeys = Object.keys(defines).sort();
|
|
70
87
|
const injectKeys = Object.keys(inject).sort();
|
|
@@ -88,7 +105,7 @@ export default class ProgramManager {
|
|
|
88
105
|
}`;
|
|
89
106
|
|
|
90
107
|
if (!this._programCache[hash]) {
|
|
91
|
-
const assembled = assembleShaders(this.
|
|
108
|
+
const assembled = assembleShaders(this.device, {
|
|
92
109
|
vs,
|
|
93
110
|
fs,
|
|
94
111
|
modules,
|
|
@@ -98,7 +115,8 @@ export default class ProgramManager {
|
|
|
98
115
|
transpileToGLSL100
|
|
99
116
|
});
|
|
100
117
|
|
|
101
|
-
|
|
118
|
+
// @ts-expect-error TODO - program should be created from device
|
|
119
|
+
this._programCache[hash] = new Program(this.device.gl, {
|
|
102
120
|
hash,
|
|
103
121
|
vs: assembled.vs,
|
|
104
122
|
fs: assembled.fs,
|
|
@@ -106,7 +124,7 @@ export default class ProgramManager {
|
|
|
106
124
|
bufferMode
|
|
107
125
|
});
|
|
108
126
|
|
|
109
|
-
this._getUniforms[hash] = assembled.getUniforms || (x => {});
|
|
127
|
+
this._getUniforms[hash] = assembled.getUniforms || ((x) => {});
|
|
110
128
|
this._useCounts[hash] = 0;
|
|
111
129
|
}
|
|
112
130
|
|
|
@@ -115,11 +133,11 @@ export default class ProgramManager {
|
|
|
115
133
|
return this._programCache[hash];
|
|
116
134
|
}
|
|
117
135
|
|
|
118
|
-
getUniforms(program) {
|
|
136
|
+
getUniforms(program: Program) {
|
|
119
137
|
return this._getUniforms[program.hash] || null;
|
|
120
138
|
}
|
|
121
139
|
|
|
122
|
-
release(program) {
|
|
140
|
+
release(program: Program): void {
|
|
123
141
|
const hash = program.hash;
|
|
124
142
|
this._useCounts[hash]--;
|
|
125
143
|
|
|
@@ -131,7 +149,7 @@ export default class ProgramManager {
|
|
|
131
149
|
}
|
|
132
150
|
}
|
|
133
151
|
|
|
134
|
-
_getHash(key) {
|
|
152
|
+
_getHash(key: string): string {
|
|
135
153
|
if (this._hashes[key] === undefined) {
|
|
136
154
|
this._hashes[key] = this._hashCounter++;
|
|
137
155
|
}
|
|
@@ -140,7 +158,7 @@ export default class ProgramManager {
|
|
|
140
158
|
}
|
|
141
159
|
|
|
142
160
|
// Dedup and combine with default modules
|
|
143
|
-
_getModuleList(appModules = []) {
|
|
161
|
+
_getModuleList(appModules: Module[] = []): Module[] {
|
|
144
162
|
const modules = new Array(this._defaultModules.length + appModules.length);
|
|
145
163
|
const seen = {};
|
|
146
164
|
let count = 0;
|
|
@@ -154,6 +172,7 @@ export default class ProgramManager {
|
|
|
154
172
|
|
|
155
173
|
for (let i = 0, len = appModules.length; i < len; ++i) {
|
|
156
174
|
const module = appModules[i];
|
|
175
|
+
// @ts-expect-error
|
|
157
176
|
const name = module.name;
|
|
158
177
|
if (!seen[name]) {
|
|
159
178
|
modules[count++] = module;
|