@luma.gl/engine 8.6.0-alpha.4 → 9.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/key-frames.d.ts +1 -0
- package/dist/animation/key-frames.d.ts.map +1 -1
- package/dist/animation/key-frames.js.map +1 -1
- package/dist/animation/timeline.d.ts +1 -1
- package/dist/animation/timeline.d.ts.map +1 -1
- package/dist/animation/timeline.js.map +1 -1
- package/dist/geometries/cone-geometry.d.ts.map +1 -1
- package/dist/geometries/cone-geometry.js +1 -1
- package/dist/geometries/cone-geometry.js.map +1 -1
- package/dist/geometries/cube-geometry.d.ts +4 -0
- package/dist/geometries/cube-geometry.d.ts.map +1 -1
- package/dist/geometries/cube-geometry.js +30 -7
- package/dist/geometries/cube-geometry.js.map +1 -1
- package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
- package/dist/geometries/cylinder-geometry.js +1 -1
- package/dist/geometries/cylinder-geometry.js.map +1 -1
- package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/ico-sphere-geometry.js +1 -1
- package/dist/geometries/ico-sphere-geometry.js.map +1 -1
- package/dist/geometries/plane-geometry.d.ts.map +1 -1
- package/dist/geometries/plane-geometry.js +1 -1
- package/dist/geometries/plane-geometry.js.map +1 -1
- package/dist/geometries/sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/sphere-geometry.js +1 -1
- package/dist/geometries/sphere-geometry.js.map +1 -1
- package/dist/geometries/truncated-cone-geometry.d.ts +15 -3
- package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
- package/dist/geometries/truncated-cone-geometry.js +29 -15
- package/dist/geometries/truncated-cone-geometry.js.map +1 -1
- package/dist/geometry/geometry-table.d.ts +15 -0
- package/dist/geometry/geometry-table.d.ts.map +1 -0
- package/dist/geometry/geometry-table.js +2 -0
- package/dist/{transform/transform-types.js.map → geometry/geometry-table.js.map} +1 -1
- package/dist/geometry/geometry-utils.js.map +1 -1
- package/dist/geometry/geometry.d.ts +34 -7
- package/dist/geometry/geometry.d.ts.map +1 -1
- package/dist/geometry/geometry.js +33 -11
- package/dist/geometry/geometry.js.map +1 -1
- package/dist/geometry/primitive-utils.d.ts +1 -0
- package/dist/geometry/primitive-utils.d.ts.map +1 -0
- package/dist/geometry/primitive-utils.js +2 -0
- package/dist/geometry/primitive-utils.js.map +1 -0
- package/dist/index.d.ts +3 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/animation-loop.d.ts +14 -73
- package/dist/lib/animation-loop.d.ts.map +1 -1
- package/dist/lib/animation-loop.js +39 -160
- package/dist/lib/animation-loop.js.map +1 -1
- package/dist/lib/animation-props.d.ts +24 -0
- package/dist/lib/animation-props.d.ts.map +1 -0
- package/dist/lib/animation-props.js +2 -0
- package/dist/lib/animation-props.js.map +1 -0
- package/dist/lib/clip-space.d.ts +1 -0
- package/dist/lib/clip-space.d.ts.map +1 -0
- package/dist/lib/clip-space.js +2 -0
- package/dist/lib/clip-space.js.map +1 -0
- package/dist/lib/model-utils.d.ts +4 -3
- package/dist/lib/model-utils.d.ts.map +1 -1
- package/dist/lib/model-utils.js +24 -70
- package/dist/lib/model-utils.js.map +1 -1
- package/dist/lib/model.d.ts +34 -104
- package/dist/lib/model.d.ts.map +1 -1
- package/dist/lib/model.js +108 -505
- package/dist/lib/model.js.map +1 -1
- package/dist/lib/pipeline-factory.d.ts +55 -0
- package/dist/lib/pipeline-factory.d.ts.map +1 -0
- package/dist/lib/pipeline-factory.js +191 -0
- package/dist/lib/pipeline-factory.js.map +1 -0
- package/dist/lib/render-loop.d.ts +4 -17
- package/dist/lib/render-loop.d.ts.map +1 -1
- package/dist/lib/render-loop.js +14 -21
- package/dist/lib/render-loop.js.map +1 -1
- package/package.json +5 -5
- package/src/animation/key-frames.ts +1 -0
- package/src/animation/timeline.ts +1 -1
- package/src/geometries/cone-geometry.ts +1 -1
- package/src/geometries/cube-geometry.ts +159 -8
- package/src/geometries/cylinder-geometry.ts +1 -1
- package/src/geometries/ico-sphere-geometry.ts +1 -1
- package/src/geometries/plane-geometry.ts +1 -1
- package/src/geometries/sphere-geometry.ts +2 -2
- package/src/geometries/truncated-cone-geometry.ts +30 -12
- package/src/geometry/geometry-table.ts +16 -0
- package/src/geometry/geometry-utils.ts +1 -1
- package/src/geometry/geometry.ts +58 -13
- package/src/geometry/primitive-utils.ts +30 -0
- package/src/index.ts +7 -8
- package/src/lib/animation-loop.ts +85 -274
- package/src/lib/animation-props.ts +31 -0
- package/src/{utils → lib}/clip-space.ts +5 -2
- package/src/lib/model-utils.ts +60 -32
- package/src/lib/model.ts +126 -642
- package/src/lib/pipeline-factory.ts +225 -0
- package/src/lib/render-loop.ts +21 -19
- package/dist/lib/program-manager.d.ts +0 -39
- package/dist/lib/program-manager.d.ts.map +0 -1
- package/dist/lib/program-manager.js +0 -175
- package/dist/lib/program-manager.js.map +0 -1
- package/dist/transform/buffer-transform.d.ts +0 -36
- package/dist/transform/buffer-transform.d.ts.map +0 -1
- package/dist/transform/buffer-transform.js +0 -255
- package/dist/transform/buffer-transform.js.map +0 -1
- package/dist/transform/texture-transform.d.ts +0 -57
- package/dist/transform/texture-transform.d.ts.map +0 -1
- package/dist/transform/texture-transform.js +0 -412
- package/dist/transform/texture-transform.js.map +0 -1
- package/dist/transform/transform-shader-utils.d.ts +0 -26
- package/dist/transform/transform-shader-utils.d.ts.map +0 -1
- package/dist/transform/transform-shader-utils.js +0 -149
- package/dist/transform/transform-shader-utils.js.map +0 -1
- package/dist/transform/transform-types.d.ts +0 -44
- package/dist/transform/transform-types.d.ts.map +0 -1
- package/dist/transform/transform-types.js +0 -2
- package/dist/transform/transform.d.ts +0 -47
- package/dist/transform/transform.d.ts.map +0 -1
- package/dist/transform/transform.js +0 -198
- package/dist/transform/transform.js.map +0 -1
- package/dist/utils/clip-space.d.ts +0 -5
- package/dist/utils/clip-space.d.ts.map +0 -1
- package/dist/utils/clip-space.js +0 -34
- package/dist/utils/clip-space.js.map +0 -1
- package/src/lib/program-manager.ts +0 -187
- package/src/transform/buffer-transform.ts +0 -214
- package/src/transform/texture-transform.ts +0 -344
- package/src/transform/transform-shader-utils.ts +0 -169
- package/src/transform/transform-types.ts +0 -42
- package/src/transform/transform.ts +0 -189
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/** Properties for creating Transforms */
|
|
2
|
-
export declare 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[];
|
|
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
|
-
/** Options that can be provided when running a Transform */
|
|
26
|
-
export declare type TransformRunOptions = {
|
|
27
|
-
clearRenderTarget?: boolean;
|
|
28
|
-
uniforms: Record<string, any>;
|
|
29
|
-
};
|
|
30
|
-
/** Options that control drawing a Transform. Used by subclasses to return draw parameters */
|
|
31
|
-
export declare type TransformDrawOptions = {
|
|
32
|
-
attributes?: object;
|
|
33
|
-
framebuffer?: any;
|
|
34
|
-
uniforms?: object;
|
|
35
|
-
discard?: boolean;
|
|
36
|
-
parameters?: object;
|
|
37
|
-
transformFeedback?: any;
|
|
38
|
-
};
|
|
39
|
-
export declare type TransformBinding = {
|
|
40
|
-
sourceBuffers: any;
|
|
41
|
-
feedbackBuffers: any;
|
|
42
|
-
transformFeedback: any;
|
|
43
|
-
};
|
|
44
|
-
//# sourceMappingURL=transform-types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transform-types.d.ts","sourceRoot":"","sources":["../../src/transform/transform-types.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oBAAY,cAAc,GAAG;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,4DAA4D;AAC5D,oBAAY,mBAAmB,GAAG;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B,CAAC;AAEF,6FAA6F;AAC7F,oBAAY,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACzB,CAAC;AAEF,oBAAY,gBAAgB,GAAG;IAAC,aAAa,MAAC;IAAC,eAAe,MAAC;IAAC,iBAAiB,MAAA;CAAC,CAAC"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Device } from '@luma.gl/api';
|
|
2
|
-
import type { Framebuffer, Buffer } from '@luma.gl/webgl';
|
|
3
|
-
import { WebGLDevice } from '@luma.gl/webgl';
|
|
4
|
-
import Model from '../lib/model';
|
|
5
|
-
import { TransformProps, TransformRunOptions, TransformDrawOptions } from './transform-types';
|
|
6
|
-
/**
|
|
7
|
-
* Takes source and target buffers/textures and sets up the pipeline
|
|
8
|
-
*/
|
|
9
|
-
export default class Transform {
|
|
10
|
-
/**
|
|
11
|
-
* Check if Transforms are supported (they are not under WebGL1)
|
|
12
|
-
* @todo differentiate writing to buffer vs not
|
|
13
|
-
*/
|
|
14
|
-
static isSupported(device: Device | WebGL2RenderingContext): boolean;
|
|
15
|
-
readonly device: WebGLDevice;
|
|
16
|
-
readonly gl: WebGL2RenderingContext;
|
|
17
|
-
model: Model | null;
|
|
18
|
-
elementCount: number;
|
|
19
|
-
bufferTransform: any;
|
|
20
|
-
textureTransform: any;
|
|
21
|
-
elementIDBuffer: any;
|
|
22
|
-
constructor(device: Device | WebGL2RenderingContext, props?: TransformProps);
|
|
23
|
-
/** Delete owned resources. */
|
|
24
|
-
destroy(): void;
|
|
25
|
-
/** @deprecated Use destroy*() */
|
|
26
|
-
delete(): void;
|
|
27
|
-
/** Run one transform loop. */
|
|
28
|
-
run(options?: TransformRunOptions): void;
|
|
29
|
-
/** swap resources if a map is provided */
|
|
30
|
-
swap(): void;
|
|
31
|
-
/** Return Buffer object for given varying name. */
|
|
32
|
-
getBuffer(varyingName?: string): Buffer;
|
|
33
|
-
/** Return data either from Buffer or from Texture */
|
|
34
|
-
getData(options?: {
|
|
35
|
-
packed?: boolean;
|
|
36
|
-
varyingName?: string;
|
|
37
|
-
}): any;
|
|
38
|
-
/** Return framebuffer object if rendering to textures */
|
|
39
|
-
getFramebuffer(): Framebuffer | null;
|
|
40
|
-
/** Update some or all buffer/texture bindings. */
|
|
41
|
-
update(props: TransformProps): void;
|
|
42
|
-
_initialize(props: TransformProps): void;
|
|
43
|
-
_updateModelProps(props: TransformProps): TransformProps;
|
|
44
|
-
_buildResourceTransforms(gl: WebGL2RenderingContext, props: TransformProps): void;
|
|
45
|
-
_updateDrawOptions(options: TransformRunOptions): TransformDrawOptions;
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=transform.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,198 +0,0 @@
|
|
|
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';
|
|
7
|
-
import BufferTransform from './buffer-transform';
|
|
8
|
-
import TextureTransform from './texture-transform';
|
|
9
|
-
export default class Transform {
|
|
10
|
-
static isSupported(device) {
|
|
11
|
-
try {
|
|
12
|
-
const webglDevice = WebGLDevice.attach(device);
|
|
13
|
-
return webglDevice.isWebGL2;
|
|
14
|
-
} catch {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
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;
|
|
36
|
-
|
|
37
|
-
this._initialize(props);
|
|
38
|
-
|
|
39
|
-
Object.seal(this);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
destroy() {
|
|
43
|
-
const {
|
|
44
|
-
model,
|
|
45
|
-
bufferTransform,
|
|
46
|
-
textureTransform
|
|
47
|
-
} = this;
|
|
48
|
-
|
|
49
|
-
if (model) {
|
|
50
|
-
model.delete();
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (bufferTransform) {
|
|
54
|
-
bufferTransform.delete();
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if (textureTransform) {
|
|
58
|
-
textureTransform.delete();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
delete() {
|
|
63
|
-
this.destroy();
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
run(options) {
|
|
67
|
-
const {
|
|
68
|
-
clearRenderTarget = true
|
|
69
|
-
} = options || {};
|
|
70
|
-
|
|
71
|
-
const updatedOpts = this._updateDrawOptions(options);
|
|
72
|
-
|
|
73
|
-
if (clearRenderTarget && updatedOpts.framebuffer) {
|
|
74
|
-
updatedOpts.framebuffer.clear({
|
|
75
|
-
color: true
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
this.model.transform(updatedOpts);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
swap() {
|
|
83
|
-
let swapped = false;
|
|
84
|
-
const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
|
|
85
|
-
|
|
86
|
-
for (const resourceTransform of resourceTransforms) {
|
|
87
|
-
swapped = swapped || resourceTransform.swap();
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
assert(swapped, 'Nothing to swap');
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
getBuffer(varyingName = null) {
|
|
94
|
-
return this.bufferTransform && this.bufferTransform.getBuffer(varyingName);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
getData(options = {}) {
|
|
98
|
-
const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
|
|
99
|
-
|
|
100
|
-
for (const resourceTransform of resourceTransforms) {
|
|
101
|
-
const data = resourceTransform.getData(options);
|
|
102
|
-
|
|
103
|
-
if (data) {
|
|
104
|
-
return data;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
getFramebuffer() {
|
|
112
|
-
return this.textureTransform && this.textureTransform.getFramebuffer();
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
update(props) {
|
|
116
|
-
if ('elementCount' in props) {
|
|
117
|
-
this.model.setVertexCount(props.elementCount);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
|
|
121
|
-
|
|
122
|
-
for (const resourceTransform of resourceTransforms) {
|
|
123
|
-
resourceTransform.update(props);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
_initialize(props) {
|
|
128
|
-
const {
|
|
129
|
-
gl
|
|
130
|
-
} = this;
|
|
131
|
-
|
|
132
|
-
this._buildResourceTransforms(gl, props);
|
|
133
|
-
|
|
134
|
-
props = this._updateModelProps(props);
|
|
135
|
-
this.model = new Model(this.device, Object.assign({}, props, {
|
|
136
|
-
fs: props.fs || getPassthroughFS({
|
|
137
|
-
version: getShaderInfo(props.vs).version
|
|
138
|
-
}),
|
|
139
|
-
id: props.id || 'transform-model',
|
|
140
|
-
drawMode: props.drawMode || GL.POINTS,
|
|
141
|
-
vertexCount: props.elementCount
|
|
142
|
-
}));
|
|
143
|
-
|
|
144
|
-
if (this.bufferTransform) {
|
|
145
|
-
this.bufferTransform.setupResources({
|
|
146
|
-
model: this.model
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
_updateModelProps(props) {
|
|
152
|
-
let updatedProps = { ...props
|
|
153
|
-
};
|
|
154
|
-
const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
|
|
155
|
-
|
|
156
|
-
for (const resourceTransform of resourceTransforms) {
|
|
157
|
-
updatedProps = resourceTransform.updateModelProps(updatedProps);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
return updatedProps;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
_buildResourceTransforms(gl, props) {
|
|
164
|
-
if (canCreateBufferTransform(props)) {
|
|
165
|
-
this.bufferTransform = new BufferTransform(gl, props);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
if (canCreateTextureTransform(props)) {
|
|
169
|
-
this.textureTransform = new TextureTransform(gl, props);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
assert(this.bufferTransform || this.textureTransform, 'must provide source/feedback buffers or source/target textures');
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
_updateDrawOptions(options) {
|
|
176
|
-
let updatedOpts = { ...options
|
|
177
|
-
};
|
|
178
|
-
const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
|
|
179
|
-
|
|
180
|
-
for (const resourceTransform of resourceTransforms) {
|
|
181
|
-
updatedOpts = Object.assign(updatedOpts, resourceTransform.getDrawOptions(updatedOpts));
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
return updatedOpts;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
function canCreateBufferTransform(props) {
|
|
190
|
-
const canCreate = !isObjectEmpty(props.feedbackBuffers) || !isObjectEmpty(props.feedbackMap) || props.varyings && props.varyings.length > 0;
|
|
191
|
-
return Boolean(canCreate);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function canCreateTextureTransform(props) {
|
|
195
|
-
const canCreate = !isObjectEmpty(props._sourceTextures) || props._targetTexture || props._targetTextureVarying;
|
|
196
|
-
return canCreate;
|
|
197
|
-
}
|
|
198
|
-
//# sourceMappingURL=transform.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/utils/clip-space.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import GL from '@luma.gl/constants';
|
|
2
|
-
import Model from '../lib/model';
|
|
3
|
-
import Geometry from '../geometry/geometry';
|
|
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";
|
|
5
|
-
const POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];
|
|
6
|
-
export default class ClipSpace extends Model {
|
|
7
|
-
constructor(gl, opts) {
|
|
8
|
-
const TEX_COORDS = POSITIONS.map(coord => coord === -1 ? 0 : coord);
|
|
9
|
-
super(gl, Object.assign({}, opts, {
|
|
10
|
-
vs: CLIPSPACE_VERTEX_SHADER,
|
|
11
|
-
geometry: new Geometry({
|
|
12
|
-
drawMode: GL.TRIANGLE_STRIP,
|
|
13
|
-
vertexCount: 4,
|
|
14
|
-
attributes: {
|
|
15
|
-
aClipSpacePosition: {
|
|
16
|
-
size: 2,
|
|
17
|
-
value: new Float32Array(POSITIONS)
|
|
18
|
-
},
|
|
19
|
-
aTexCoord: {
|
|
20
|
-
size: 2,
|
|
21
|
-
value: new Float32Array(TEX_COORDS)
|
|
22
|
-
},
|
|
23
|
-
aCoordinate: {
|
|
24
|
-
size: 2,
|
|
25
|
-
value: new Float32Array(TEX_COORDS)
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
})
|
|
29
|
-
}));
|
|
30
|
-
this.setVertexCount(4);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=clip-space.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import {Device} from '@luma.gl/api/';
|
|
2
|
-
import {assembleShaders} from '@luma.gl/shadertools';
|
|
3
|
-
import {Program} from '@luma.gl/webgl';
|
|
4
|
-
|
|
5
|
-
type Module = 'string' | {name: string}; // TODO
|
|
6
|
-
|
|
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
|
-
};
|
|
17
|
-
|
|
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
|
-
}
|
|
38
|
-
|
|
39
|
-
constructor(device: Device) {
|
|
40
|
-
this.device = device;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
addDefaultModule(module: Module): void {
|
|
44
|
-
// @ts-expect-error
|
|
45
|
-
if (!this._defaultModules.find((m) => m.name === module.name)) {
|
|
46
|
-
this._defaultModules.push(module);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
this.stateHash++;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
removeDefaultModule(module: Module): void {
|
|
53
|
-
const moduleName = typeof module === 'string' ? module : module.name;
|
|
54
|
-
this._defaultModules = this._defaultModules.filter((m) => m.name !== moduleName);
|
|
55
|
-
this.stateHash++;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
addShaderHook(hook, opts?): void {
|
|
59
|
-
if (opts) {
|
|
60
|
-
hook = Object.assign(opts, {hook});
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
this._hookFunctions.push(hook);
|
|
64
|
-
this.stateHash++;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
get(props: GetProgramOptions = {}): Program {
|
|
68
|
-
const {
|
|
69
|
-
vs = '',
|
|
70
|
-
fs = '',
|
|
71
|
-
defines = {},
|
|
72
|
-
inject = {},
|
|
73
|
-
varyings = [],
|
|
74
|
-
bufferMode = 0x8c8d,
|
|
75
|
-
transpileToGLSL100 = false
|
|
76
|
-
} = props; // varyings/bufferMode for xform feedback, 0x8c8d = SEPARATE_ATTRIBS
|
|
77
|
-
|
|
78
|
-
const modules = this._getModuleList(props.modules); // Combine with default modules
|
|
79
|
-
|
|
80
|
-
const vsHash = this._getHash(vs);
|
|
81
|
-
const fsHash = this._getHash(fs);
|
|
82
|
-
// @ts-expect-error
|
|
83
|
-
const moduleHashes = modules.map((m) => this._getHash(m.name)).sort();
|
|
84
|
-
const varyingHashes = varyings.map((v) => this._getHash(v));
|
|
85
|
-
|
|
86
|
-
const defineKeys = Object.keys(defines).sort();
|
|
87
|
-
const injectKeys = Object.keys(inject).sort();
|
|
88
|
-
const defineHashes = [];
|
|
89
|
-
const injectHashes = [];
|
|
90
|
-
|
|
91
|
-
for (const key of defineKeys) {
|
|
92
|
-
defineHashes.push(this._getHash(key));
|
|
93
|
-
defineHashes.push(this._getHash(defines[key]));
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
for (const key of injectKeys) {
|
|
97
|
-
injectHashes.push(this._getHash(key));
|
|
98
|
-
injectHashes.push(this._getHash(inject[key]));
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const hash = `${vsHash}/${fsHash}D${defineHashes.join('/')}M${moduleHashes.join(
|
|
102
|
-
'/'
|
|
103
|
-
)}I${injectHashes.join('/')}V${varyingHashes.join('/')}H${this.stateHash}B${bufferMode}${
|
|
104
|
-
transpileToGLSL100 ? 'T' : ''
|
|
105
|
-
}`;
|
|
106
|
-
|
|
107
|
-
if (!this._programCache[hash]) {
|
|
108
|
-
const assembled = assembleShaders(this.device, {
|
|
109
|
-
vs,
|
|
110
|
-
fs,
|
|
111
|
-
modules,
|
|
112
|
-
inject,
|
|
113
|
-
defines,
|
|
114
|
-
hookFunctions: this._hookFunctions,
|
|
115
|
-
transpileToGLSL100
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
// @ts-expect-error TODO - program should be created from device
|
|
119
|
-
this._programCache[hash] = new Program(this.device.gl, {
|
|
120
|
-
hash,
|
|
121
|
-
vs: assembled.vs,
|
|
122
|
-
fs: assembled.fs,
|
|
123
|
-
varyings,
|
|
124
|
-
bufferMode
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
this._getUniforms[hash] = assembled.getUniforms || ((x) => {});
|
|
128
|
-
this._useCounts[hash] = 0;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
this._useCounts[hash]++;
|
|
132
|
-
|
|
133
|
-
return this._programCache[hash];
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
getUniforms(program: Program) {
|
|
137
|
-
return this._getUniforms[program.hash] || null;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
release(program: Program): void {
|
|
141
|
-
const hash = program.hash;
|
|
142
|
-
this._useCounts[hash]--;
|
|
143
|
-
|
|
144
|
-
if (this._useCounts[hash] === 0) {
|
|
145
|
-
this._programCache[hash].delete();
|
|
146
|
-
delete this._programCache[hash];
|
|
147
|
-
delete this._getUniforms[hash];
|
|
148
|
-
delete this._useCounts[hash];
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
_getHash(key: string): string {
|
|
153
|
-
if (this._hashes[key] === undefined) {
|
|
154
|
-
this._hashes[key] = this._hashCounter++;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
return this._hashes[key];
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Dedup and combine with default modules
|
|
161
|
-
_getModuleList(appModules: Module[] = []): Module[] {
|
|
162
|
-
const modules = new Array(this._defaultModules.length + appModules.length);
|
|
163
|
-
const seen = {};
|
|
164
|
-
let count = 0;
|
|
165
|
-
|
|
166
|
-
for (let i = 0, len = this._defaultModules.length; i < len; ++i) {
|
|
167
|
-
const module = this._defaultModules[i];
|
|
168
|
-
const name = module.name;
|
|
169
|
-
modules[count++] = module;
|
|
170
|
-
seen[name] = true;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
for (let i = 0, len = appModules.length; i < len; ++i) {
|
|
174
|
-
const module = appModules[i];
|
|
175
|
-
// @ts-expect-error
|
|
176
|
-
const name = module.name;
|
|
177
|
-
if (!seen[name]) {
|
|
178
|
-
modules[count++] = module;
|
|
179
|
-
seen[name] = true;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
modules.length = count;
|
|
184
|
-
|
|
185
|
-
return modules;
|
|
186
|
-
}
|
|
187
|
-
}
|