@luma.gl/engine 9.0.0-alpha.5 → 9.0.0-alpha.51
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/LICENSE +3 -1
- package/dist/animation/key-frames.d.ts +1 -1
- package/dist/animation/key-frames.d.ts.map +1 -1
- package/dist/animation/key-frames.js +6 -27
- package/dist/animation/key-frames.js.map +1 -1
- package/dist/animation/timeline.d.ts +9 -9
- package/dist/animation/timeline.d.ts.map +1 -1
- package/dist/animation/timeline.js +18 -49
- package/dist/animation/timeline.js.map +1 -1
- package/dist/{lib → animation-loop}/animation-loop.d.ts +30 -31
- package/dist/animation-loop/animation-loop.d.ts.map +1 -0
- package/dist/{lib → animation-loop}/animation-loop.js +115 -199
- package/dist/animation-loop/animation-loop.js.map +1 -0
- package/dist/{lib → animation-loop}/animation-props.d.ts +6 -7
- package/dist/animation-loop/animation-props.d.ts.map +1 -0
- package/dist/animation-loop/animation-props.js.map +1 -0
- package/dist/animation-loop/make-animation-loop.d.ts +6 -0
- package/dist/animation-loop/make-animation-loop.d.ts.map +1 -0
- package/dist/animation-loop/make-animation-loop.js +28 -0
- package/dist/animation-loop/make-animation-loop.js.map +1 -0
- package/dist/animation-loop/render-loop.d.ts +23 -0
- package/dist/animation-loop/render-loop.d.ts.map +1 -0
- package/dist/animation-loop/render-loop.js +7 -0
- package/dist/animation-loop/render-loop.js.map +1 -0
- package/dist/dist.dev.js +7064 -0
- package/dist/geometries/cone-geometry.d.ts +1 -1
- package/dist/geometries/cone-geometry.d.ts.map +1 -1
- package/dist/geometries/cone-geometry.js +6 -5
- package/dist/geometries/cone-geometry.js.map +1 -1
- package/dist/geometries/cube-geometry.d.ts +2 -2
- package/dist/geometries/cube-geometry.d.ts.map +1 -1
- package/dist/geometries/cube-geometry.js +15 -8
- package/dist/geometries/cube-geometry.js.map +1 -1
- package/dist/geometries/cylinder-geometry.d.ts +1 -1
- package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
- package/dist/geometries/cylinder-geometry.js +6 -5
- package/dist/geometries/cylinder-geometry.js.map +1 -1
- package/dist/geometries/ico-sphere-geometry.d.ts +2 -2
- package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/ico-sphere-geometry.js +10 -19
- package/dist/geometries/ico-sphere-geometry.js.map +1 -1
- package/dist/geometries/plane-geometry.d.ts +2 -2
- package/dist/geometries/plane-geometry.d.ts.map +1 -1
- package/dist/geometries/plane-geometry.js +14 -23
- package/dist/geometries/plane-geometry.js.map +1 -1
- package/dist/geometries/sphere-geometry.d.ts +2 -2
- package/dist/geometries/sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/sphere-geometry.js +9 -13
- package/dist/geometries/sphere-geometry.js.map +1 -1
- package/dist/geometries/truncated-cone-geometry.d.ts +2 -4
- package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
- package/dist/geometries/truncated-cone-geometry.js +9 -25
- package/dist/geometries/truncated-cone-geometry.js.map +1 -1
- package/dist/geometry/geometry-table.d.ts +2 -2
- package/dist/geometry/geometry-table.d.ts.map +1 -1
- package/dist/geometry/geometry-table.js.map +1 -1
- package/dist/geometry/geometry-utils.d.ts.map +1 -1
- package/dist/geometry/geometry-utils.js +0 -9
- package/dist/geometry/geometry-utils.js.map +1 -1
- package/dist/geometry/geometry.d.ts +50 -59
- package/dist/geometry/geometry.d.ts.map +1 -1
- package/dist/geometry/geometry.js +32 -97
- package/dist/geometry/geometry.js.map +1 -1
- package/dist/geometry/gpu-geometry.d.ts +37 -0
- package/dist/geometry/gpu-geometry.d.ts.map +1 -0
- package/dist/geometry/gpu-geometry.js +107 -0
- package/dist/geometry/gpu-geometry.js.map +1 -0
- package/dist/geometry/gpu-table.d.ts +1 -0
- package/dist/geometry/gpu-table.d.ts.map +1 -0
- package/dist/geometry/gpu-table.js +2 -0
- package/dist/geometry/gpu-table.js.map +1 -0
- package/dist/index.cjs +2959 -0
- package/dist/index.d.ts +26 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -13
- package/dist/index.js.map +1 -1
- package/dist/lib/clip-space.d.ts +8 -0
- package/dist/lib/clip-space.d.ts.map +1 -1
- package/dist/lib/clip-space.js +47 -0
- package/dist/lib/clip-space.js.map +1 -1
- package/dist/lib/pipeline-factory.d.ts +12 -40
- package/dist/lib/pipeline-factory.d.ts.map +1 -1
- package/dist/lib/pipeline-factory.js +50 -148
- package/dist/lib/pipeline-factory.js.map +1 -1
- package/dist/model/model.d.ts +192 -0
- package/dist/model/model.d.ts.map +1 -0
- package/dist/model/model.js +312 -0
- package/dist/model/model.js.map +1 -0
- package/dist/scenegraph/group-node.d.ts +21 -0
- package/dist/scenegraph/group-node.d.ts.map +1 -0
- package/dist/scenegraph/group-node.js +94 -0
- package/dist/scenegraph/group-node.js.map +1 -0
- package/dist/scenegraph/model-node.d.ts +18 -0
- package/dist/scenegraph/model-node.d.ts.map +1 -0
- package/dist/scenegraph/model-node.js +28 -0
- package/dist/scenegraph/model-node.js.map +1 -0
- package/dist/scenegraph/scenegraph-node.d.ts +56 -0
- package/dist/scenegraph/scenegraph-node.d.ts.map +1 -0
- package/dist/scenegraph/scenegraph-node.js +141 -0
- package/dist/scenegraph/scenegraph-node.js.map +1 -0
- package/dist/shader-inputs.d.ts +62 -0
- package/dist/shader-inputs.d.ts.map +1 -0
- package/dist/shader-inputs.js +49 -0
- package/dist/shader-inputs.js.map +1 -0
- package/dist/transform/buffer-transform.d.ts +35 -0
- package/dist/transform/buffer-transform.d.ts.map +1 -0
- package/dist/transform/buffer-transform.js +62 -0
- 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/transform/texture-transform.js +122 -0
- package/dist/transform/texture-transform.js.map +1 -0
- package/dist.min.js +286 -0
- package/package.json +21 -12
- package/src/animation/timeline.ts +16 -15
- package/src/{lib → animation-loop}/animation-loop.ts +120 -107
- package/src/{lib → animation-loop}/animation-props.ts +5 -5
- package/src/animation-loop/make-animation-loop.ts +44 -0
- package/src/animation-loop/render-loop.ts +23 -0
- package/src/geometries/cone-geometry.ts +1 -1
- package/src/geometries/cube-geometry.ts +6 -3
- package/src/geometries/cylinder-geometry.ts +2 -2
- package/src/geometries/ico-sphere-geometry.ts +7 -6
- package/src/geometries/plane-geometry.ts +5 -4
- package/src/geometries/sphere-geometry.ts +4 -3
- package/src/geometries/truncated-cone-geometry.ts +4 -13
- package/src/geometry/geometry-table.ts +1 -1
- package/src/geometry/geometry-utils.ts +3 -3
- package/src/geometry/geometry.ts +79 -119
- package/src/geometry/gpu-geometry.ts +124 -0
- package/src/geometry/gpu-table.ts +41 -0
- package/src/index.ts +38 -12
- package/src/lib/clip-space.ts +22 -21
- package/src/lib/pipeline-factory.ts +60 -168
- package/src/model/model.ts +549 -0
- package/src/scenegraph/group-node.ts +103 -0
- package/src/scenegraph/model-node.ts +50 -0
- package/src/scenegraph/scenegraph-node.ts +204 -0
- package/src/shader-inputs.ts +132 -0
- package/src/transform/buffer-transform.ts +94 -0
- package/src/transform/texture-transform.ts +169 -0
- package/dist/bundle.d.ts +0 -2
- package/dist/bundle.d.ts.map +0 -1
- package/dist/bundle.js +0 -5
- package/dist/bundle.js.map +0 -1
- package/dist/geometry/primitive-utils.d.ts +0 -1
- package/dist/geometry/primitive-utils.d.ts.map +0 -1
- package/dist/geometry/primitive-utils.js +0 -2
- package/dist/geometry/primitive-utils.js.map +0 -1
- package/dist/lib/animation-loop.d.ts.map +0 -1
- package/dist/lib/animation-loop.js.map +0 -1
- package/dist/lib/animation-props.d.ts.map +0 -1
- package/dist/lib/animation-props.js.map +0 -1
- package/dist/lib/model-utils.d.ts +0 -5
- package/dist/lib/model-utils.d.ts.map +0 -1
- package/dist/lib/model-utils.js +0 -45
- package/dist/lib/model-utils.js.map +0 -1
- package/dist/lib/model.d.ts +0 -41
- package/dist/lib/model.d.ts.map +0 -1
- package/dist/lib/model.js +0 -176
- package/dist/lib/model.js.map +0 -1
- package/dist/lib/render-loop.d.ts +0 -14
- package/dist/lib/render-loop.d.ts.map +0 -1
- package/dist/lib/render-loop.js +0 -49
- package/dist/lib/render-loop.js.map +0 -1
- package/src/bundle.ts +0 -4
- package/src/geometry/primitive-utils.ts +0 -30
- package/src/lib/model-utils.ts +0 -124
- package/src/lib/model.ts +0 -179
- package/src/lib/render-loop.ts +0 -58
- /package/dist/{lib → animation-loop}/animation-props.js +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,27 @@
|
|
|
1
|
-
export
|
|
2
|
-
export {
|
|
3
|
-
export type {
|
|
4
|
-
export {
|
|
5
|
-
export type { AnimationLoopProps } from './
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
1
|
+
export { Timeline } from './animation/timeline';
|
|
2
|
+
export { KeyFrames } from './animation/key-frames';
|
|
3
|
+
export type { AnimationProps } from './animation-loop/animation-props';
|
|
4
|
+
export { AnimationLoopTemplate } from './animation-loop/render-loop';
|
|
5
|
+
export type { AnimationLoopProps } from './animation-loop/animation-loop';
|
|
6
|
+
export { AnimationLoop } from './animation-loop/animation-loop';
|
|
7
|
+
export type { MakeAnimationLoopProps } from './animation-loop/make-animation-loop';
|
|
8
|
+
export { makeAnimationLoop } from './animation-loop/make-animation-loop';
|
|
9
|
+
export type { ModelProps } from './model/model';
|
|
10
|
+
export { Model } from './model/model';
|
|
11
|
+
export type { BufferTransformProps } from './transform/buffer-transform';
|
|
12
|
+
export { BufferTransform } from './transform/buffer-transform';
|
|
13
|
+
export type { TextureTransformProps } from './transform/texture-transform';
|
|
14
|
+
export { TextureTransform } from './transform/texture-transform';
|
|
15
|
+
export { PipelineFactory } from './lib/pipeline-factory';
|
|
16
|
+
export { ClipSpace } from './lib/clip-space';
|
|
17
|
+
export { ScenegraphNode } from './scenegraph/scenegraph-node';
|
|
18
|
+
export { GroupNode } from './scenegraph/group-node';
|
|
19
|
+
export type { ModelNodeProps } from './scenegraph/model-node';
|
|
20
|
+
export { ModelNode } from './scenegraph/model-node';
|
|
21
|
+
export type { GeometryProps } from './geometry/geometry';
|
|
22
|
+
export { Geometry } from './geometry/geometry';
|
|
23
|
+
export type { GPUGeometryProps } from './geometry/gpu-geometry';
|
|
24
|
+
export { GPUGeometry } from './geometry/gpu-geometry';
|
|
8
25
|
export type { ConeGeometryProps } from './geometries/cone-geometry';
|
|
9
26
|
export { ConeGeometry } from './geometries/cone-geometry';
|
|
10
27
|
export type { CubeGeometryProps } from './geometries/cube-geometry';
|
|
@@ -19,6 +36,6 @@ export type { SphereGeometryProps } from './geometries/sphere-geometry';
|
|
|
19
36
|
export { SphereGeometry } from './geometries/sphere-geometry';
|
|
20
37
|
export type { TruncatedConeGeometryProps } from './geometries/truncated-cone-geometry';
|
|
21
38
|
export { TruncatedConeGeometry } from './geometries/truncated-cone-geometry';
|
|
22
|
-
export {
|
|
23
|
-
export {
|
|
39
|
+
export type { ShaderModuleInputs } from './shader-inputs';
|
|
40
|
+
export { ShaderInputs as _ShaderInputs } from './shader-inputs';
|
|
24
41
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,YAAY,EAAC,cAAc,EAAC,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAC,qBAAqB,EAAC,MAAM,8BAA8B,CAAC;AAEnE,YAAY,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAC,aAAa,EAAC,MAAM,iCAAiC,CAAC;AAE9D,YAAY,EAAC,sBAAsB,EAAC,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAC,iBAAiB,EAAC,MAAM,sCAAsC,CAAC;AAEvE,YAAY,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AAGpC,YAAY,EAAC,oBAAoB,EAAC,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAC,qBAAqB,EAAC,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAG3C,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAClD,YAAY,EAAC,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAGlD,YAAY,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AAGpD,YAAY,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,YAAY,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,YAAY,EAAC,qBAAqB,EAAC,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAC;AAChE,YAAY,EAAC,sBAAsB,EAAC,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAC,iBAAiB,EAAC,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAC,kBAAkB,EAAC,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,YAAY,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,YAAY,EAAC,0BAA0B,EAAC,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAAC,qBAAqB,EAAC,MAAM,sCAAsC,CAAC;AAG3E,YAAY,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAC,YAAY,IAAI,aAAa,EAAC,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
1
|
+
export { Timeline } from "./animation/timeline.js";
|
|
2
|
+
export { KeyFrames } from "./animation/key-frames.js";
|
|
3
|
+
export { AnimationLoopTemplate } from "./animation-loop/render-loop.js";
|
|
4
|
+
export { AnimationLoop } from "./animation-loop/animation-loop.js";
|
|
5
|
+
export { makeAnimationLoop } from "./animation-loop/make-animation-loop.js";
|
|
6
|
+
export { Model } from "./model/model.js";
|
|
7
|
+
export { BufferTransform } from "./transform/buffer-transform.js";
|
|
8
|
+
export { TextureTransform } from "./transform/texture-transform.js";
|
|
9
|
+
export { PipelineFactory } from "./lib/pipeline-factory.js";
|
|
10
|
+
export { ClipSpace } from "./lib/clip-space.js";
|
|
11
|
+
export { ScenegraphNode } from "./scenegraph/scenegraph-node.js";
|
|
12
|
+
export { GroupNode } from "./scenegraph/group-node.js";
|
|
13
|
+
export { ModelNode } from "./scenegraph/model-node.js";
|
|
14
|
+
export { Geometry } from "./geometry/geometry.js";
|
|
15
|
+
export { GPUGeometry } from "./geometry/gpu-geometry.js";
|
|
16
|
+
export { ConeGeometry } from "./geometries/cone-geometry.js";
|
|
17
|
+
export { CubeGeometry } from "./geometries/cube-geometry.js";
|
|
18
|
+
export { CylinderGeometry } from "./geometries/cylinder-geometry.js";
|
|
19
|
+
export { IcoSphereGeometry } from "./geometries/ico-sphere-geometry.js";
|
|
20
|
+
export { PlaneGeometry } from "./geometries/plane-geometry.js";
|
|
21
|
+
export { SphereGeometry } from "./geometries/sphere-geometry.js";
|
|
22
|
+
export { TruncatedConeGeometry } from "./geometries/truncated-cone-geometry.js";
|
|
23
|
+
export { ShaderInputs as _ShaderInputs } from "./shader-inputs.js";
|
|
14
24
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","names":["Timeline","KeyFrames","AnimationLoopTemplate","AnimationLoop","makeAnimationLoop","Model","BufferTransform","TextureTransform","PipelineFactory","ClipSpace","ScenegraphNode","GroupNode","ModelNode","Geometry","GPUGeometry","ConeGeometry","CubeGeometry","CylinderGeometry","IcoSphereGeometry","PlaneGeometry","SphereGeometry","TruncatedConeGeometry","ShaderInputs","_ShaderInputs"],"sources":["../src/index.ts"],"sourcesContent":["// luma.gl Engine API\n\n// Animation\nexport {Timeline} from './animation/timeline';\nexport {KeyFrames} from './animation/key-frames';\nexport type {AnimationProps} from './animation-loop/animation-props';\n\nexport {AnimationLoopTemplate} from './animation-loop/render-loop';\n\nexport type {AnimationLoopProps} from './animation-loop/animation-loop';\nexport {AnimationLoop} from './animation-loop/animation-loop';\n\nexport type {MakeAnimationLoopProps} from './animation-loop/make-animation-loop';\nexport {makeAnimationLoop} from './animation-loop/make-animation-loop';\n\nexport type {ModelProps} from './model/model';\nexport {Model} from './model/model';\n\n// Transforms\nexport type {BufferTransformProps} from './transform/buffer-transform';\nexport {BufferTransform} from './transform/buffer-transform';\nexport type {TextureTransformProps} from './transform/texture-transform';\nexport {TextureTransform} from './transform/texture-transform';\n\nexport {PipelineFactory} from './lib/pipeline-factory';\n\n// Utils\nexport {ClipSpace} from './lib/clip-space';\n\n// Scenegraph Core nodes\nexport {ScenegraphNode} from './scenegraph/scenegraph-node';\nexport {GroupNode} from './scenegraph/group-node';\nexport type {ModelNodeProps} from './scenegraph/model-node';\nexport {ModelNode} from './scenegraph/model-node';\n\n// Geometries\nexport type {GeometryProps} from './geometry/geometry';\nexport {Geometry} from './geometry/geometry';\nexport type {GPUGeometryProps} from './geometry/gpu-geometry';\nexport {GPUGeometry} from './geometry/gpu-geometry';\n\n// Primitives\nexport type {ConeGeometryProps} from './geometries/cone-geometry';\nexport {ConeGeometry} from './geometries/cone-geometry';\nexport type {CubeGeometryProps} from './geometries/cube-geometry';\nexport {CubeGeometry} from './geometries/cube-geometry';\nexport type {CylinderGeometryProps} from './geometries/cylinder-geometry';\nexport {CylinderGeometry} from './geometries/cylinder-geometry';\nexport type {IcoSphereGeometryProps} from './geometries/ico-sphere-geometry';\nexport {IcoSphereGeometry} from './geometries/ico-sphere-geometry';\nexport type {PlaneGeometryProps} from './geometries/plane-geometry';\nexport {PlaneGeometry} from './geometries/plane-geometry';\nexport type {SphereGeometryProps} from './geometries/sphere-geometry';\nexport {SphereGeometry} from './geometries/sphere-geometry';\nexport type {TruncatedConeGeometryProps} from './geometries/truncated-cone-geometry';\nexport {TruncatedConeGeometry} from './geometries/truncated-cone-geometry';\n\n// EXPERIMENTAL\nexport type {ShaderModuleInputs} from './shader-inputs';\nexport {ShaderInputs as _ShaderInputs} from './shader-inputs';\n"],"mappings":"SAGQA,QAAQ;AAAA,SACRC,SAAS;AAAA,SAGTC,qBAAqB;AAAA,SAGrBC,aAAa;AAAA,SAGbC,iBAAiB;AAAA,SAGjBC,KAAK;AAAA,SAILC,eAAe;AAAA,SAEfC,gBAAgB;AAAA,SAEhBC,eAAe;AAAA,SAGfC,SAAS;AAAA,SAGTC,cAAc;AAAA,SACdC,SAAS;AAAA,SAETC,SAAS;AAAA,SAITC,QAAQ;AAAA,SAERC,WAAW;AAAA,SAIXC,YAAY;AAAA,SAEZC,YAAY;AAAA,SAEZC,gBAAgB;AAAA,SAEhBC,iBAAiB;AAAA,SAEjBC,aAAa;AAAA,SAEbC,cAAc;AAAA,SAEdC,qBAAqB;AAAA,SAIrBC,YAAY,IAAIC,aAAa"}
|
package/dist/lib/clip-space.d.ts
CHANGED
|
@@ -1 +1,9 @@
|
|
|
1
|
+
import { Device } from '@luma.gl/core';
|
|
2
|
+
import { Model, ModelProps } from '../model/model';
|
|
3
|
+
/**
|
|
4
|
+
* A flat geometry that covers the "visible area" that the GPU renders.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ClipSpace extends Model {
|
|
7
|
+
constructor(device: Device, opts?: ModelProps);
|
|
8
|
+
}
|
|
1
9
|
//# sourceMappingURL=clip-space.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clip-space.d.ts","sourceRoot":"","sources":["../../src/lib/clip-space.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"clip-space.d.ts","sourceRoot":"","sources":["../../src/lib/clip-space.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAO,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAC,KAAK,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAuBjD;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;gBACtB,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU;CAqB9C"}
|
package/dist/lib/clip-space.js
CHANGED
|
@@ -1,2 +1,49 @@
|
|
|
1
|
+
import { glsl } from '@luma.gl/core';
|
|
2
|
+
import { Model } from "../model/model.js";
|
|
3
|
+
import { Geometry } from "../geometry/geometry.js";
|
|
4
|
+
const CLIPSPACE_VERTEX_SHADER = glsl`\
|
|
5
|
+
in vec2 aClipSpacePosition;
|
|
6
|
+
in vec2 aTexCoord;
|
|
7
|
+
in vec2 aCoordinate;
|
|
1
8
|
|
|
9
|
+
out vec2 position;
|
|
10
|
+
out vec2 coordinate;
|
|
11
|
+
out vec2 uv;
|
|
12
|
+
|
|
13
|
+
void main(void) {
|
|
14
|
+
gl_Position = vec4(aClipSpacePosition, 0., 1.);
|
|
15
|
+
position = aClipSpacePosition;
|
|
16
|
+
coordinate = aCoordinate;
|
|
17
|
+
uv = aTexCoord;
|
|
18
|
+
}
|
|
19
|
+
`;
|
|
20
|
+
const POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];
|
|
21
|
+
export class ClipSpace extends Model {
|
|
22
|
+
constructor(device, opts) {
|
|
23
|
+
const TEX_COORDS = POSITIONS.map(coord => coord === -1 ? 0 : coord);
|
|
24
|
+
super(device, {
|
|
25
|
+
...opts,
|
|
26
|
+
vs: CLIPSPACE_VERTEX_SHADER,
|
|
27
|
+
vertexCount: 4,
|
|
28
|
+
geometry: new Geometry({
|
|
29
|
+
topology: 'triangle-strip',
|
|
30
|
+
vertexCount: 4,
|
|
31
|
+
attributes: {
|
|
32
|
+
aClipSpacePosition: {
|
|
33
|
+
size: 2,
|
|
34
|
+
value: new Float32Array(POSITIONS)
|
|
35
|
+
},
|
|
36
|
+
aTexCoord: {
|
|
37
|
+
size: 2,
|
|
38
|
+
value: new Float32Array(TEX_COORDS)
|
|
39
|
+
},
|
|
40
|
+
aCoordinate: {
|
|
41
|
+
size: 2,
|
|
42
|
+
value: new Float32Array(TEX_COORDS)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
2
49
|
//# sourceMappingURL=clip-space.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"clip-space.js","names":["glsl","Model","Geometry","CLIPSPACE_VERTEX_SHADER","POSITIONS","ClipSpace","constructor","device","opts","TEX_COORDS","map","coord","vs","vertexCount","geometry","topology","attributes","aClipSpacePosition","size","value","Float32Array","aTexCoord","aCoordinate"],"sources":["../../src/lib/clip-space.ts"],"sourcesContent":["\n// ClipSpace\nimport {Device, glsl} from '@luma.gl/core';\nimport {Model, ModelProps} from '../model/model';\nimport {Geometry} from '../geometry/geometry';\n\nconst CLIPSPACE_VERTEX_SHADER = glsl`\\\nin vec2 aClipSpacePosition;\nin vec2 aTexCoord;\nin vec2 aCoordinate;\n\nout vec2 position;\nout vec2 coordinate;\nout 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/**\n * A flat geometry that covers the \"visible area\" that the GPU renders.\n */\nexport class ClipSpace extends Model {\n constructor(device: Device, opts?: ModelProps) {\n const TEX_COORDS = POSITIONS.map((coord) => (coord === -1 ? 0 : coord));\n\n super(\n device,\n {\n ...opts,\n vs: CLIPSPACE_VERTEX_SHADER,\n vertexCount: 4,\n geometry: new Geometry({\n topology: '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 }\n}\n"],"mappings":"AAEA,SAAgBA,IAAI,QAAO,eAAe;AAAC,SACnCC,KAAK;AAAA,SACLC,QAAQ;AAEhB,MAAMC,uBAAuB,GAAGH,IAAK;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAGD,MAAMI,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAK9C,OAAO,MAAMC,SAAS,SAASJ,KAAK,CAAC;EACnCK,WAAWA,CAACC,MAAc,EAAEC,IAAiB,EAAE;IAC7C,MAAMC,UAAU,GAAGL,SAAS,CAACM,GAAG,CAAEC,KAAK,IAAMA,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,GAAGA,KAAM,CAAC;IAEvE,KAAK,CACHJ,MAAM,EACN;MACE,GAAGC,IAAI;MACPI,EAAE,EAAET,uBAAuB;MAC3BU,WAAW,EAAE,CAAC;MACdC,QAAQ,EAAE,IAAIZ,QAAQ,CAAC;QACrBa,QAAQ,EAAE,gBAAgB;QAC1BF,WAAW,EAAE,CAAC;QACdG,UAAU,EAAE;UACVC,kBAAkB,EAAE;YAACC,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAAChB,SAAS;UAAC,CAAC;UACjEiB,SAAS,EAAE;YAACH,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACX,UAAU;UAAC,CAAC;UACzDa,WAAW,EAAE;YAACJ,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACX,UAAU;UAAC;QAC5D;MACF,CAAC;IACH,CACF,CAAC;EACH;AACF"}
|
|
@@ -1,55 +1,27 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { Device, RenderPipeline } from '@luma.gl/
|
|
3
|
-
|
|
4
|
-
export
|
|
1
|
+
import type { RenderPipelineProps } from '@luma.gl/core';
|
|
2
|
+
import { Device, RenderPipeline } from '@luma.gl/core';
|
|
3
|
+
/** Todo - should be same as RenderPipelineProps */
|
|
4
|
+
export type PipelineFactoryProps = Omit<RenderPipelineProps, 'vs' | 'fs'> & {
|
|
5
5
|
vs: string;
|
|
6
6
|
fs: string;
|
|
7
|
-
topology: any;
|
|
8
|
-
parameters?: RenderPipelineParameters;
|
|
9
|
-
modules?: ShaderModule[];
|
|
10
|
-
defines?: Record<string, string>;
|
|
11
|
-
inject?: Record<string, string>;
|
|
12
|
-
transpileToGLSL100?: boolean;
|
|
13
|
-
varyings?: string[];
|
|
14
|
-
bufferMode?: number;
|
|
15
7
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
inject?: Record<string, string>;
|
|
22
|
-
transpileToGLSL100?: boolean;
|
|
23
|
-
varyings?: string[];
|
|
24
|
-
bufferMode?: number;
|
|
25
|
-
};
|
|
26
|
-
/** Efficiently create shared pipelines with varying parameters */
|
|
27
|
-
export default class PipelineFactory {
|
|
8
|
+
/**
|
|
9
|
+
* Efficiently creates / caches pipelines
|
|
10
|
+
*/
|
|
11
|
+
export declare class PipelineFactory {
|
|
12
|
+
static defaultProps: Required<PipelineFactoryProps>;
|
|
28
13
|
readonly device: Device;
|
|
29
|
-
stateHash: number;
|
|
30
14
|
private _hashCounter;
|
|
31
15
|
private readonly _hashes;
|
|
32
16
|
private readonly _useCounts;
|
|
33
17
|
private readonly _pipelineCache;
|
|
34
|
-
private readonly _getUniforms;
|
|
35
|
-
private readonly _hookFunctions;
|
|
36
|
-
private _defaultModules;
|
|
37
18
|
static getDefaultPipelineFactory(device: Device): PipelineFactory;
|
|
38
19
|
constructor(device: Device);
|
|
39
|
-
|
|
40
|
-
createRenderPipeline(options: GetRenderPipelineOptions): {
|
|
41
|
-
renderPipeline: RenderPipeline;
|
|
42
|
-
getUniforms: (props: Record<string, Record<string, any>>) => Record<string, any>;
|
|
43
|
-
};
|
|
20
|
+
createRenderPipeline(options: PipelineFactoryProps): RenderPipeline;
|
|
44
21
|
release(pipeline: RenderPipeline): void;
|
|
45
|
-
|
|
46
|
-
_createRenderPipeline(props: GetRenderPipelineOptions): {
|
|
47
|
-
renderPipeline: RenderPipeline;
|
|
48
|
-
getUniforms: (props: Record<string, Record<string, any>>) => Record<string, any>;
|
|
49
|
-
};
|
|
22
|
+
_createRenderPipeline(props: PipelineFactoryProps): RenderPipeline;
|
|
50
23
|
/** Calculate a hash based on all the inputs for a render pipeline */
|
|
51
|
-
_hashRenderPipeline(props:
|
|
24
|
+
_hashRenderPipeline(props: PipelineFactoryProps): string;
|
|
52
25
|
_getHash(key: string): number;
|
|
53
|
-
_getModuleList(appModules?: ShaderModule[]): ShaderModule[];
|
|
54
26
|
}
|
|
55
27
|
//# sourceMappingURL=pipeline-factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-factory.d.ts","sourceRoot":"","sources":["../../src/lib/pipeline-factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipeline-factory.d.ts","sourceRoot":"","sources":["../../src/lib/pipeline-factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AACvD,OAAO,EAAC,MAAM,EAAE,cAAc,EAAC,MAAM,eAAe,CAAC;AAErD,mDAAmD;AACnD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG;IAE1E,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAe;IAC1B,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAIlD;IAED,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsC;IAErE,MAAM,CAAC,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;gBAKrD,MAAM,EAAE,MAAM;IAI1B,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,cAAc;IAsBnE,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAYvC,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,GAAG,cAAc;IAclE,qEAAqE;IACrE,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM;IAuBxD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAM9B"}
|
|
@@ -1,191 +1,93 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
const DEFAULT_RENDER_PIPELINE_OPTIONS = {
|
|
4
|
-
vs: '',
|
|
5
|
-
fs: '',
|
|
6
|
-
modules: [],
|
|
7
|
-
defines: {},
|
|
8
|
-
inject: {},
|
|
9
|
-
transpileToGLSL100: false,
|
|
10
|
-
varyings: [],
|
|
11
|
-
bufferMode: 0x8c8d,
|
|
12
|
-
topology: 'triangle-list',
|
|
13
|
-
parameters: {}
|
|
14
|
-
};
|
|
15
|
-
export default class PipelineFactory {
|
|
1
|
+
import { RenderPipeline } from '@luma.gl/core';
|
|
2
|
+
export class PipelineFactory {
|
|
16
3
|
static getDefaultPipelineFactory(device) {
|
|
17
|
-
device.defaultPipelineFactory = device.defaultPipelineFactory || new PipelineFactory(device);
|
|
18
|
-
return device.defaultPipelineFactory;
|
|
4
|
+
device._lumaData.defaultPipelineFactory = device._lumaData.defaultPipelineFactory || new PipelineFactory(device);
|
|
5
|
+
return device._lumaData.defaultPipelineFactory;
|
|
19
6
|
}
|
|
20
|
-
|
|
21
7
|
constructor(device) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
_defineProperty(this, "_hashes", {});
|
|
29
|
-
|
|
30
|
-
_defineProperty(this, "_useCounts", {});
|
|
31
|
-
|
|
32
|
-
_defineProperty(this, "_pipelineCache", {});
|
|
33
|
-
|
|
34
|
-
_defineProperty(this, "_getUniforms", {});
|
|
35
|
-
|
|
36
|
-
_defineProperty(this, "_hookFunctions", []);
|
|
37
|
-
|
|
38
|
-
_defineProperty(this, "_defaultModules", []);
|
|
39
|
-
|
|
8
|
+
this.device = void 0;
|
|
9
|
+
this._hashCounter = 0;
|
|
10
|
+
this._hashes = {};
|
|
11
|
+
this._useCounts = {};
|
|
12
|
+
this._pipelineCache = {};
|
|
40
13
|
this.device = device;
|
|
41
14
|
}
|
|
42
|
-
|
|
43
|
-
addShaderHook(hook, opts) {
|
|
44
|
-
if (opts) {
|
|
45
|
-
hook = Object.assign(opts, {
|
|
46
|
-
hook
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
this._hookFunctions.push(hook);
|
|
51
|
-
|
|
52
|
-
this.stateHash++;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
15
|
createRenderPipeline(options) {
|
|
56
|
-
const props = {
|
|
16
|
+
const props = {
|
|
17
|
+
...PipelineFactory.defaultProps,
|
|
57
18
|
...options
|
|
58
19
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const hash = this._hashRenderPipeline({ ...props,
|
|
63
|
-
modules
|
|
20
|
+
const hash = this._hashRenderPipeline({
|
|
21
|
+
...props
|
|
64
22
|
});
|
|
65
|
-
|
|
66
23
|
if (!this._pipelineCache[hash]) {
|
|
67
|
-
const {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
24
|
+
const pipeline = this.device.createRenderPipeline({
|
|
25
|
+
...props,
|
|
26
|
+
vs: this.device.createShader({
|
|
27
|
+
stage: 'vertex',
|
|
28
|
+
source: props.vs
|
|
29
|
+
}),
|
|
30
|
+
fs: props.fs ? this.device.createShader({
|
|
31
|
+
stage: 'fragment',
|
|
32
|
+
source: props.fs
|
|
33
|
+
}) : null
|
|
72
34
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
this._pipelineCache[hash] = renderPipeline;
|
|
76
|
-
|
|
77
|
-
this._getUniforms[hash] = getUniforms || (x => {});
|
|
78
|
-
|
|
35
|
+
pipeline.hash = hash;
|
|
36
|
+
this._pipelineCache[hash] = pipeline;
|
|
79
37
|
this._useCounts[hash] = 0;
|
|
80
38
|
}
|
|
81
|
-
|
|
82
39
|
this._useCounts[hash]++;
|
|
83
|
-
return
|
|
84
|
-
renderPipeline: this._pipelineCache[hash],
|
|
85
|
-
getUniforms: this._getUniforms[hash]
|
|
86
|
-
};
|
|
40
|
+
return this._pipelineCache[hash];
|
|
87
41
|
}
|
|
88
|
-
|
|
89
42
|
release(pipeline) {
|
|
90
43
|
const hash = pipeline.hash;
|
|
91
44
|
this._useCounts[hash]--;
|
|
92
|
-
|
|
93
45
|
if (this._useCounts[hash] === 0) {
|
|
94
46
|
this._pipelineCache[hash].destroy();
|
|
95
|
-
|
|
96
47
|
delete this._pipelineCache[hash];
|
|
97
|
-
delete this._getUniforms[hash];
|
|
98
48
|
delete this._useCounts[hash];
|
|
99
49
|
}
|
|
100
50
|
}
|
|
101
|
-
|
|
102
|
-
getUniforms(pipeline) {
|
|
103
|
-
return this._getUniforms[pipeline.hash] || null;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
51
|
_createRenderPipeline(props) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
hookFunctions: this._hookFunctions
|
|
113
|
-
});
|
|
114
|
-
const renderPipeline = this.device.createRenderPipeline({ ...props,
|
|
52
|
+
if (!props.fs) {
|
|
53
|
+
throw new Error('fs');
|
|
54
|
+
}
|
|
55
|
+
const pipeline = this.device.createRenderPipeline({
|
|
56
|
+
...props,
|
|
115
57
|
vs: this.device.createShader({
|
|
116
58
|
stage: 'vertex',
|
|
117
|
-
source:
|
|
59
|
+
source: props.vs
|
|
118
60
|
}),
|
|
119
|
-
fs:
|
|
61
|
+
fs: props.fs ? this.device.createShader({
|
|
120
62
|
stage: 'fragment',
|
|
121
|
-
source:
|
|
122
|
-
})
|
|
63
|
+
source: props.fs
|
|
64
|
+
}) : null
|
|
123
65
|
});
|
|
124
|
-
return
|
|
125
|
-
renderPipeline,
|
|
126
|
-
getUniforms: assembled.getUniforms
|
|
127
|
-
};
|
|
66
|
+
return pipeline;
|
|
128
67
|
}
|
|
129
|
-
|
|
130
68
|
_hashRenderPipeline(props) {
|
|
131
69
|
const vsHash = this._getHash(props.vs);
|
|
132
|
-
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
for (const key of defineKeys) {
|
|
143
|
-
defineHashes.push(this._getHash(key));
|
|
144
|
-
defineHashes.push(this._getHash(props.defines[key]));
|
|
70
|
+
const fsHash = props.fs ? this._getHash(props.fs) : 0;
|
|
71
|
+
const varyingHash = '-';
|
|
72
|
+
switch (this.device.info.type) {
|
|
73
|
+
case 'webgpu':
|
|
74
|
+
const parameterHash = this._getHash(JSON.stringify(props.parameters));
|
|
75
|
+
const bufferLayoutHash = this._getHash(JSON.stringify(props.bufferLayout));
|
|
76
|
+
return `${vsHash}/${fsHash}V${varyingHash}T${props.topology}P${parameterHash}BL${bufferLayoutHash}}`;
|
|
77
|
+
default:
|
|
78
|
+
return `${vsHash}/${fsHash}V${varyingHash}`;
|
|
145
79
|
}
|
|
146
|
-
|
|
147
|
-
for (const key of injectKeys) {
|
|
148
|
-
injectHashes.push(this._getHash(key));
|
|
149
|
-
injectHashes.push(this._getHash(props.inject[key]));
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const parameterHash = JSON.stringify(props.parameters);
|
|
153
|
-
return "".concat(vsHash, "/").concat(fsHash, "D").concat(defineHashes.join('/'), "M").concat(moduleHashes.join('/'), "I").concat(injectHashes.join('/'), "V").concat(varyingHashes.join('/'), "H").concat(this.stateHash, "B").concat(props.bufferMode).concat(props.transpileToGLSL100 ? 'T' : '', "P").concat(parameterHash);
|
|
154
80
|
}
|
|
155
|
-
|
|
156
81
|
_getHash(key) {
|
|
157
82
|
if (this._hashes[key] === undefined) {
|
|
158
83
|
this._hashes[key] = this._hashCounter++;
|
|
159
84
|
}
|
|
160
|
-
|
|
161
85
|
return this._hashes[key];
|
|
162
86
|
}
|
|
163
|
-
|
|
164
|
-
_getModuleList(appModules = []) {
|
|
165
|
-
const modules = new Array(this._defaultModules.length + appModules.length);
|
|
166
|
-
const seen = {};
|
|
167
|
-
let count = 0;
|
|
168
|
-
|
|
169
|
-
for (let i = 0, len = this._defaultModules.length; i < len; ++i) {
|
|
170
|
-
const module = this._defaultModules[i];
|
|
171
|
-
const name = module.name;
|
|
172
|
-
modules[count++] = module;
|
|
173
|
-
seen[name] = true;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
for (let i = 0, len = appModules.length; i < len; ++i) {
|
|
177
|
-
const module = appModules[i];
|
|
178
|
-
const name = module.name;
|
|
179
|
-
|
|
180
|
-
if (!seen[name]) {
|
|
181
|
-
modules[count++] = module;
|
|
182
|
-
seen[name] = true;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
modules.length = count;
|
|
187
|
-
return modules;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
87
|
}
|
|
88
|
+
PipelineFactory.defaultProps = {
|
|
89
|
+
...RenderPipeline.defaultProps,
|
|
90
|
+
vs: undefined,
|
|
91
|
+
fs: undefined
|
|
92
|
+
};
|
|
191
93
|
//# sourceMappingURL=pipeline-factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/pipeline-factory.ts"],"names":["assembleShaders","DEFAULT_RENDER_PIPELINE_OPTIONS","vs","fs","modules","defines","inject","transpileToGLSL100","varyings","bufferMode","topology","parameters","PipelineFactory","getDefaultPipelineFactory","device","defaultPipelineFactory","constructor","addShaderHook","hook","opts","Object","assign","_hookFunctions","push","stateHash","createRenderPipeline","options","props","_getModuleList","hash","_hashRenderPipeline","_pipelineCache","renderPipeline","getUniforms","_createRenderPipeline","_getUniforms","x","_useCounts","release","pipeline","destroy","platformInfo","gpu","info","features","assembled","hookFunctions","createShader","stage","source","vsHash","_getHash","fsHash","moduleHashes","map","m","name","sort","varyingHashes","v","defineKeys","keys","injectKeys","defineHashes","injectHashes","key","parameterHash","JSON","stringify","join","_hashes","undefined","_hashCounter","appModules","Array","_defaultModules","length","seen","count","i","len","module"],"mappings":"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","sourcesContent":["import type {RenderPipelineProps, RenderPipelineParameters} from '@luma.gl/api';\nimport {Device, RenderPipeline, ComputePipeline} from '@luma.gl/api/';\nimport type { ShaderModule } from '@luma.gl/shadertools';\nimport {assembleShaders} from '@luma.gl/shadertools';\n\nexport type GetRenderPipelineOptions = {\n vs: string,\n fs: string,\n topology;\n parameters?: RenderPipelineParameters;\n\n modules?: ShaderModule[];\n defines?: Record<string, string>,\n inject?: Record<string, string>,\n transpileToGLSL100?: boolean;\n\n varyings?: string[],\n bufferMode?: number, \n};\n\nexport type GetComputePipelineOptions = {\n cs: string,\n parameters?: RenderPipelineParameters;\n\n modules?: ShaderModule[];\n defines?: Record<string, string>,\n inject?: Record<string, string>,\n transpileToGLSL100?: boolean;\n\n varyings?: string[],\n bufferMode?: number,\n};\n\nconst DEFAULT_RENDER_PIPELINE_OPTIONS: Required<GetRenderPipelineOptions> = {\n vs: '',\n fs: '',\n modules: [],\n defines: {},\n inject: {},\n transpileToGLSL100: false,\n\n varyings: [],\n bufferMode: 0x8c8d, // // varyings/bufferMode for xform feedback, 0x8c8d: SEPARATE_ATTRIBS\n topology: 'triangle-list',\n parameters: {} \n};\n\n/** Efficiently create shared pipelines with varying parameters */\nexport default class PipelineFactory {\n readonly device: Device;\n\n stateHash: number = 0; // Used to change hashing if hooks are modified\n private _hashCounter: number = 0;\n private readonly _hashes: Record<string, number> = {};\n private readonly _useCounts: Record<string, number> = {};\n\n private readonly _pipelineCache: Record<string, RenderPipeline> = {};\n\n private readonly _getUniforms: Record<string, any> = {};\n private readonly _hookFunctions: any[] = [];\n private _defaultModules: any[] = [];\n // private readonly _registeredModules = {}; // TODO: Remove? This isn't used anywhere in luma.gl\n\n static getDefaultPipelineFactory(device: Device): PipelineFactory {\n // @ts-expect-error Add to device\n device.defaultPipelineFactory = device.defaultPipelineFactory || new PipelineFactory(device);\n // @ts-expect-error Add to device\n return device.defaultPipelineFactory;\n }\n\n constructor(device: Device) {\n this.device = device;\n }\n\n // addDefaultModule(module: ShaderModule): void {\n // if (!this._defaultModules.find((m) => m.name === (typeof module === 'string' ? module : module.name))) {\n // this._defaultModules.push(module);\n // }\n // this.stateHash++;\n // }\n\n // removeDefaultModule(module: ShaderModule): void {\n // const moduleName = typeof module === 'string' ? module : module.name;\n // this._defaultModules = this._defaultModules.filter((m) => m.name !== moduleName);\n // this.stateHash++;\n // }\n\n addShaderHook(hook, opts?): void {\n if (opts) {\n hook = Object.assign(opts, {hook});\n }\n this._hookFunctions.push(hook);\n this.stateHash++;\n }\n\n createRenderPipeline(options: GetRenderPipelineOptions): {\n renderPipeline: RenderPipeline;\n getUniforms: (props: Record<string, Record<string, any>>) => Record<string, any>;\n } {\n const props: Required<GetRenderPipelineOptions> = {...DEFAULT_RENDER_PIPELINE_OPTIONS, ...options};\n\n const modules = this._getModuleList(props.modules); // Combine with default modules\n\n const hash = this._hashRenderPipeline({...props, modules});\n\n if (!this._pipelineCache[hash]) {\n const {renderPipeline, getUniforms} = this._createRenderPipeline({...props, modules});\n renderPipeline.hash = hash;\n this._pipelineCache[hash] = renderPipeline;\n this._getUniforms[hash] = getUniforms || ((x: Record<string, Record<string, any>>) => {});\n this._useCounts[hash] = 0;\n }\n\n this._useCounts[hash]++;\n\n return {\n renderPipeline: this._pipelineCache[hash],\n getUniforms: this._getUniforms[hash]\n };\n }\n\n release(pipeline: RenderPipeline): void {\n const hash = pipeline.hash;\n this._useCounts[hash]--;\n if (this._useCounts[hash] === 0) {\n this._pipelineCache[hash].destroy();\n delete this._pipelineCache[hash];\n delete this._getUniforms[hash];\n delete this._useCounts[hash];\n }\n }\n\n getUniforms(pipeline: RenderPipeline) {\n return this._getUniforms[pipeline.hash] || null;\n }\n\n // PRIVATE\n\n _createRenderPipeline(props: GetRenderPipelineOptions): {\n renderPipeline: RenderPipeline,\n getUniforms: (props: Record<string, Record<string, any>>) => Record<string, any>\n } {\n const platformInfo = {\n gpu: this.device.info.gpu,\n features: this.device.features\n };\n\n const assembled = assembleShaders(platformInfo, {...props, hookFunctions: this._hookFunctions});\n\n const renderPipeline = this.device.createRenderPipeline({\n ...props,\n vs: this.device.createShader({stage: 'vertex', source: assembled.vs}),\n fs: assembled.fs && this.device.createShader({stage: 'fragment', source: assembled.fs}),\n });\n\n return {renderPipeline, getUniforms: assembled.getUniforms};\n }\n\n /** Calculate a hash based on all the inputs for a render pipeline */\n _hashRenderPipeline(props: GetRenderPipelineOptions): string {\n const vsHash = this._getHash(props.vs);\n const fsHash = this._getHash(props.fs);\n\n const moduleHashes = props.modules.map((m) => this._getHash(typeof m === 'string' ? m : m.name)).sort();\n const varyingHashes = props.varyings.map((v) => this._getHash(v));\n\n const defineKeys = Object.keys(props.defines).sort();\n const injectKeys = Object.keys(props.inject).sort();\n const defineHashes = [];\n const injectHashes = [];\n\n for (const key of defineKeys) {\n defineHashes.push(this._getHash(key));\n defineHashes.push(this._getHash(props.defines[key]));\n }\n\n for (const key of injectKeys) {\n injectHashes.push(this._getHash(key));\n injectHashes.push(this._getHash(props.inject[key]));\n }\n\n // TODO - hash parameters!\n const parameterHash = JSON.stringify(props.parameters);\n\n return `${vsHash}/${fsHash}D${defineHashes.join('/')}M${moduleHashes.join(\n '/'\n )}I${injectHashes.join('/')}V${varyingHashes.join('/')}H${this.stateHash}B${props.bufferMode}${\n props.transpileToGLSL100 ? 'T' : ''\n }P${parameterHash}`;\n }\n\n _getHash(key: string): number {\n if (this._hashes[key] === undefined) {\n this._hashes[key] = this._hashCounter++;\n }\n return this._hashes[key];\n }\n\n // Dedupe and combine with default modules\n _getModuleList(appModules: ShaderModule[] = []): ShaderModule[] {\n const modules = new Array(this._defaultModules.length + appModules.length);\n const seen: Record<string, boolean> = {};\n let count = 0;\n\n for (let i = 0, len = this._defaultModules.length; i < len; ++i) {\n const module = this._defaultModules[i];\n const name = module.name;\n modules[count++] = module;\n seen[name] = true;\n }\n\n for (let i = 0, len = appModules.length; i < len; ++i) {\n const module = appModules[i];\n const name = module.name;\n if (!seen[name]) {\n modules[count++] = module;\n seen[name] = true;\n }\n }\n\n modules.length = count;\n\n return modules;\n }\n}\n"],"file":"pipeline-factory.js"}
|
|
1
|
+
{"version":3,"file":"pipeline-factory.js","names":["RenderPipeline","PipelineFactory","getDefaultPipelineFactory","device","_lumaData","defaultPipelineFactory","constructor","_hashCounter","_hashes","_useCounts","_pipelineCache","createRenderPipeline","options","props","defaultProps","hash","_hashRenderPipeline","pipeline","vs","createShader","stage","source","fs","release","destroy","_createRenderPipeline","Error","vsHash","_getHash","fsHash","varyingHash","info","type","parameterHash","JSON","stringify","parameters","bufferLayoutHash","bufferLayout","topology","key","undefined"],"sources":["../../src/lib/pipeline-factory.ts"],"sourcesContent":["// luma.gl, MIT license\nimport type {RenderPipelineProps} from '@luma.gl/core';\nimport {Device, RenderPipeline} from '@luma.gl/core';\n\n/** Todo - should be same as RenderPipelineProps */\nexport type PipelineFactoryProps = Omit<RenderPipelineProps, 'vs' | 'fs'> & {\n // Only accepts string shaders\n vs: string;\n fs: string;\n};\n\n/** \n * Efficiently creates / caches pipelines\n */\nexport class PipelineFactory {\n static defaultProps: Required<PipelineFactoryProps> = {\n ...RenderPipeline.defaultProps,\n vs: undefined!,\n fs: undefined!\n }\n\n readonly device: Device;\n\n private _hashCounter: number = 0;\n private readonly _hashes: Record<string, number> = {};\n private readonly _useCounts: Record<string, number> = {};\n private readonly _pipelineCache: Record<string, RenderPipeline> = {};\n\n static getDefaultPipelineFactory(device: Device): PipelineFactory {\n device._lumaData.defaultPipelineFactory = device._lumaData.defaultPipelineFactory || new PipelineFactory(device);\n return device._lumaData.defaultPipelineFactory as PipelineFactory;\n }\n\n constructor(device: Device) {\n this.device = device;\n }\n\n createRenderPipeline(options: PipelineFactoryProps): RenderPipeline {\n const props: Required<PipelineFactoryProps> = {...PipelineFactory.defaultProps, ...options};\n\n const hash = this._hashRenderPipeline({...props});\n\n if (!this._pipelineCache[hash]) {\n const pipeline = this.device.createRenderPipeline({\n ...props,\n vs: this.device.createShader({stage: 'vertex', source: props.vs}),\n fs: props.fs ? this.device.createShader({stage: 'fragment', source: props.fs}) : null,\n });\n\n pipeline.hash = hash;\n this._pipelineCache[hash] = pipeline;\n this._useCounts[hash] = 0;\n }\n\n this._useCounts[hash]++;\n\n return this._pipelineCache[hash];\n }\n\n release(pipeline: RenderPipeline): void {\n const hash = pipeline.hash;\n this._useCounts[hash]--;\n if (this._useCounts[hash] === 0) {\n this._pipelineCache[hash].destroy();\n delete this._pipelineCache[hash];\n delete this._useCounts[hash];\n }\n }\n\n // PRIVATE\n\n _createRenderPipeline(props: PipelineFactoryProps): RenderPipeline {\n if (!props.fs) {\n throw new Error('fs');\n }\n\n const pipeline = this.device.createRenderPipeline({\n ...props,\n vs: this.device.createShader({stage: 'vertex', source: props.vs}),\n fs: props.fs ? this.device.createShader({stage: 'fragment', source: props.fs}) : null,\n });\n\n return pipeline;\n }\n\n /** Calculate a hash based on all the inputs for a render pipeline */\n _hashRenderPipeline(props: PipelineFactoryProps): string {\n const vsHash = this._getHash(props.vs);\n const fsHash = props.fs ? this._getHash(props.fs) : 0;\n\n // WebGL specific\n // const {varyings = [], bufferMode = {}} = props;\n // const varyingHashes = varyings.map((v) => this._getHash(v));\n const varyingHash = '-'; // `${varyingHashes.join('/')}B${bufferMode}`\n\n switch (this.device.info.type) {\n case 'webgpu':\n // On WebGPU we need to rebuild the pipeline if topology, parameters or bufferLayout change\n const parameterHash = this._getHash(JSON.stringify(props.parameters));\n const bufferLayoutHash = this._getHash(JSON.stringify(props.bufferLayout));\n // TODO - Can json.stringify() generate different strings for equivalent objects if order of params is different?\n // create a deepHash() to deduplicate?\n return `${vsHash}/${fsHash}V${varyingHash}T${props.topology}P${parameterHash}BL${bufferLayoutHash}}`;\n default:\n // WebGL is more dynamic\n return `${vsHash}/${fsHash}V${varyingHash}`;\n }\n }\n\n _getHash(key: string): number {\n if (this._hashes[key] === undefined) {\n this._hashes[key] = this._hashCounter++;\n }\n return this._hashes[key];\n }\n}\n\n"],"mappings":"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"}
|