@luma.gl/engine 9.0.0-alpha.3 → 9.0.0-alpha.30
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 +2 -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 +0 -20
- package/dist/animation/key-frames.js.map +1 -1
- package/dist/animation/timeline.d.ts +5 -5
- package/dist/animation/timeline.d.ts.map +1 -1
- package/dist/animation/timeline.js +0 -30
- package/dist/animation/timeline.js.map +1 -1
- package/dist/{lib → animation-loop}/animation-loop.d.ts +28 -29
- package/dist/animation-loop/animation-loop.d.ts.map +1 -0
- package/dist/{lib → animation-loop}/animation-loop.js +96 -175
- package/dist/animation-loop/animation-loop.js.map +1 -0
- package/dist/{lib → animation-loop}/animation-props.d.ts +7 -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 +14887 -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 +9 -18
- 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 +10 -19
- 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 -2
- package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
- package/dist/geometries/truncated-cone-geometry.js +9 -14
- 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 +35 -58
- package/dist/geometry/geometry.d.ts.map +1 -1
- package/dist/geometry/geometry.js +26 -89
- package/dist/geometry/geometry.js.map +1 -1
- package/dist/geometry/primitive-utils.js.map +1 -1
- package/dist/index.cjs +2574 -0
- package/dist/index.d.ts +18 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -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 +36 -1
- package/dist/lib/clip-space.js.map +1 -1
- package/dist/lib/pipeline-factory.d.ts +19 -14
- package/dist/lib/pipeline-factory.d.ts.map +1 -1
- package/dist/lib/pipeline-factory.js +52 -63
- package/dist/lib/pipeline-factory.js.map +1 -1
- package/dist/{lib → model}/model-utils.d.ts +2 -2
- package/dist/model/model-utils.d.ts.map +1 -0
- package/dist/{lib → model}/model-utils.js +3 -8
- package/dist/model/model-utils.js.map +1 -0
- package/dist/model/model.d.ts +65 -0
- package/dist/model/model.d.ts.map +1 -0
- package/dist/{lib → model}/model.js +56 -75
- 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 +95 -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 +29 -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 +142 -0
- package/dist/scenegraph/scenegraph-node.js.map +1 -0
- package/dist/transform/transform.d.ts +98 -0
- package/dist/transform/transform.d.ts.map +1 -0
- package/dist/transform/transform.js +67 -0
- package/dist/transform/transform.js.map +1 -0
- package/dist.min.js +314 -0
- package/package.json +22 -12
- package/src/animation/timeline.ts +2 -2
- package/src/{lib → animation-loop}/animation-loop.ts +115 -97
- package/src/{lib → animation-loop}/animation-props.ts +6 -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 -3
- package/src/geometry/geometry-table.ts +1 -1
- package/src/geometry/geometry-utils.ts +3 -3
- package/src/geometry/geometry.ts +72 -115
- package/src/index.ts +28 -12
- package/src/lib/clip-space.ts +17 -15
- package/src/lib/pipeline-factory.ts +60 -51
- package/src/{lib → model}/model-utils.ts +5 -4
- package/src/model/model.ts +226 -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/transform/transform.ts +246 -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/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.map +0 -1
- 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.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/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,21 @@
|
|
|
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 { Transform } from './transform/transform';
|
|
12
|
+
export { PipelineFactory } from './lib/pipeline-factory';
|
|
13
|
+
export { ClipSpace } from './lib/clip-space';
|
|
14
|
+
export { ScenegraphNode } from './scenegraph/scenegraph-node';
|
|
15
|
+
export { GroupNode } from './scenegraph/group-node';
|
|
16
|
+
export { ModelNode } from './scenegraph/model-node';
|
|
17
|
+
export type { GeometryProps } from './geometry/geometry';
|
|
18
|
+
export { Geometry } from './geometry/geometry';
|
|
8
19
|
export type { ConeGeometryProps } from './geometries/cone-geometry';
|
|
9
20
|
export { ConeGeometry } from './geometries/cone-geometry';
|
|
10
21
|
export type { CubeGeometryProps } from './geometries/cube-geometry';
|
|
@@ -19,6 +30,4 @@ export type { SphereGeometryProps } from './geometries/sphere-geometry';
|
|
|
19
30
|
export { SphereGeometry } from './geometries/sphere-geometry';
|
|
20
31
|
export type { TruncatedConeGeometryProps } from './geometries/truncated-cone-geometry';
|
|
21
32
|
export { TruncatedConeGeometry } from './geometries/truncated-cone-geometry';
|
|
22
|
-
export { Timeline } from './animation/timeline';
|
|
23
|
-
export { KeyFrames } from './animation/key-frames';
|
|
24
33
|
//# 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;AAEpC,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAEhD,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,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAGlD,YAAY,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAG7C,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"}
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
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 { Transform } from "./transform/transform.js";
|
|
8
|
+
export { PipelineFactory } from "./lib/pipeline-factory.js";
|
|
9
|
+
export { ClipSpace } from "./lib/clip-space.js";
|
|
10
|
+
export { ScenegraphNode } from "./scenegraph/scenegraph-node.js";
|
|
11
|
+
export { GroupNode } from "./scenegraph/group-node.js";
|
|
12
|
+
export { ModelNode } from "./scenegraph/model-node.js";
|
|
13
|
+
export { Geometry } from "./geometry/geometry.js";
|
|
14
|
+
export { ConeGeometry } from "./geometries/cone-geometry.js";
|
|
15
|
+
export { CubeGeometry } from "./geometries/cube-geometry.js";
|
|
16
|
+
export { CylinderGeometry } from "./geometries/cylinder-geometry.js";
|
|
17
|
+
export { IcoSphereGeometry } from "./geometries/ico-sphere-geometry.js";
|
|
18
|
+
export { PlaneGeometry } from "./geometries/plane-geometry.js";
|
|
19
|
+
export { SphereGeometry } from "./geometries/sphere-geometry.js";
|
|
20
|
+
export { TruncatedConeGeometry } from "./geometries/truncated-cone-geometry.js";
|
|
14
21
|
//# 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","Transform","PipelineFactory","ClipSpace","ScenegraphNode","GroupNode","ModelNode","Geometry","ConeGeometry","CubeGeometry","CylinderGeometry","IcoSphereGeometry","PlaneGeometry","SphereGeometry","TruncatedConeGeometry"],"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\nexport {Transform} from './transform/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 {ModelNode} from './scenegraph/model-node';\n\n// Geometries\nexport type {GeometryProps} from './geometry/geometry';\nexport {Geometry} from './geometry/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"],"mappings":"SAGQA,QAAQ;AAAA,SACRC,SAAS;AAAA,SAGTC,qBAAqB;AAAA,SAGrBC,aAAa;AAAA,SAGbC,iBAAiB;AAAA,SAGjBC,KAAK;AAAA,SAELC,SAAS;AAAA,SAETC,eAAe;AAAA,SAGfC,SAAS;AAAA,SAGTC,cAAc;AAAA,SACdC,SAAS;AAAA,SACTC,SAAS;AAAA,SAITC,QAAQ;AAAA,SAIRC,YAAY;AAAA,SAEZC,YAAY;AAAA,SAEZC,gBAAgB;AAAA,SAEhBC,iBAAiB;AAAA,SAEjBC,aAAa;AAAA,SAEbC,cAAc;AAAA,SAEdC,qBAAqB"}
|
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 | WebGLRenderingContext, 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;AAE3C,OAAO,EAAC,KAAK,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAuBjD;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;gBACtB,MAAM,EAAE,MAAM,GAAG,qBAAqB,EAAE,IAAI,CAAC,EAAE,UAAU;CAqBtE"}
|
package/dist/lib/clip-space.js
CHANGED
|
@@ -1,2 +1,37 @@
|
|
|
1
|
-
|
|
1
|
+
import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
|
|
2
|
+
var _templateObject;
|
|
3
|
+
import { glsl } from '@luma.gl/core';
|
|
4
|
+
import { WebGLDevice } from '@luma.gl/webgl';
|
|
5
|
+
import { Model } from "../model/model.js";
|
|
6
|
+
import { Geometry } from "../geometry/geometry.js";
|
|
7
|
+
const CLIPSPACE_VERTEX_SHADER = glsl(_templateObject || (_templateObject = _taggedTemplateLiteral(["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"], ["\\\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"])));
|
|
8
|
+
const POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];
|
|
9
|
+
export class ClipSpace extends Model {
|
|
10
|
+
constructor(device, opts) {
|
|
11
|
+
const TEX_COORDS = POSITIONS.map(coord => coord === -1 ? 0 : coord);
|
|
12
|
+
super(WebGLDevice.attach(device), {
|
|
13
|
+
...opts,
|
|
14
|
+
vs: CLIPSPACE_VERTEX_SHADER,
|
|
15
|
+
vertexCount: 4,
|
|
16
|
+
geometry: new Geometry({
|
|
17
|
+
topology: 'triangle-strip',
|
|
18
|
+
vertexCount: 4,
|
|
19
|
+
attributes: {
|
|
20
|
+
aClipSpacePosition: {
|
|
21
|
+
size: 2,
|
|
22
|
+
value: new Float32Array(POSITIONS)
|
|
23
|
+
},
|
|
24
|
+
aTexCoord: {
|
|
25
|
+
size: 2,
|
|
26
|
+
value: new Float32Array(TEX_COORDS)
|
|
27
|
+
},
|
|
28
|
+
aCoordinate: {
|
|
29
|
+
size: 2,
|
|
30
|
+
value: new Float32Array(TEX_COORDS)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
2
37
|
//# sourceMappingURL=clip-space.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"clip-space.js","names":["glsl","WebGLDevice","Model","Geometry","CLIPSPACE_VERTEX_SHADER","_templateObject","_taggedTemplateLiteral","POSITIONS","ClipSpace","constructor","device","opts","TEX_COORDS","map","coord","attach","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 {WebGLDevice} from '@luma.gl/webgl';\nimport {Model, ModelProps} from '../model/model';\nimport {Geometry} from '../geometry/geometry';\n\nconst CLIPSPACE_VERTEX_SHADER = glsl`\\\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/**\n * A flat geometry that covers the \"visible area\" that the GPU renders.\n */\nexport class ClipSpace extends Model {\n constructor(device: Device | WebGLRenderingContext, opts?: ModelProps) {\n const TEX_COORDS = POSITIONS.map((coord) => (coord === -1 ? 0 : coord));\n\n super(\n WebGLDevice.attach(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;AAC1C,SAAQC,WAAW,QAAO,gBAAgB;AAAC,SACnCC,KAAK;AAAA,SACLC,QAAQ;AAEhB,MAAMC,uBAAuB,GAAGJ,IAAI,CAAAK,eAAA,KAAAA,eAAA,GAAAC,sBAAA,gpBAenC;AAGD,MAAMC,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,SAASN,KAAK,CAAC;EACnCO,WAAWA,CAACC,MAAsC,EAAEC,IAAiB,EAAE;IACrE,MAAMC,UAAU,GAAGL,SAAS,CAACM,GAAG,CAAEC,KAAK,IAAMA,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,GAAGA,KAAM,CAAC;IAEvE,KAAK,CACHb,WAAW,CAACc,MAAM,CAACL,MAAM,CAAC,EAC1B;MACE,GAAGC,IAAI;MACPK,EAAE,EAAEZ,uBAAuB;MAC3Ba,WAAW,EAAE,CAAC;MACdC,QAAQ,EAAE,IAAIf,QAAQ,CAAC;QACrBgB,QAAQ,EAAE,gBAAgB;QAC1BF,WAAW,EAAE,CAAC;QACdG,UAAU,EAAE;UACVC,kBAAkB,EAAE;YAACC,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACjB,SAAS;UAAC,CAAC;UACjEkB,SAAS,EAAE;YAACH,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACZ,UAAU;UAAC,CAAC;UACzDc,WAAW,EAAE;YAACJ,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACZ,UAAU;UAAC;QAC5D;MACF,CAAC;IACH,CACF,CAAC;EACH;AACF"}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import type { RenderPipelineParameters } from '@luma.gl/
|
|
2
|
-
import { Device, RenderPipeline } from '@luma.gl/
|
|
1
|
+
import type { RenderPipelineParameters, PrimitiveTopology, ShaderLayout } from '@luma.gl/core';
|
|
2
|
+
import { Device, RenderPipeline } from '@luma.gl/core';
|
|
3
3
|
import type { ShaderModule } from '@luma.gl/shadertools';
|
|
4
|
-
export
|
|
4
|
+
export type GetRenderPipelineOptions = {
|
|
5
5
|
vs: string;
|
|
6
|
-
fs: string;
|
|
7
|
-
topology:
|
|
6
|
+
fs: string | null;
|
|
7
|
+
topology: PrimitiveTopology;
|
|
8
|
+
layout?: ShaderLayout | null;
|
|
8
9
|
parameters?: RenderPipelineParameters;
|
|
9
10
|
modules?: ShaderModule[];
|
|
10
|
-
defines?: Record<string, string>;
|
|
11
|
+
defines?: Record<string, string | number | boolean>;
|
|
11
12
|
inject?: Record<string, string>;
|
|
12
13
|
transpileToGLSL100?: boolean;
|
|
13
14
|
varyings?: string[];
|
|
14
15
|
bufferMode?: number;
|
|
15
16
|
};
|
|
16
|
-
export
|
|
17
|
+
export type GetComputePipelineOptions = {
|
|
17
18
|
cs: string;
|
|
18
19
|
parameters?: RenderPipelineParameters;
|
|
19
20
|
modules?: ShaderModule[];
|
|
@@ -23,8 +24,9 @@ export declare type GetComputePipelineOptions = {
|
|
|
23
24
|
varyings?: string[];
|
|
24
25
|
bufferMode?: number;
|
|
25
26
|
};
|
|
27
|
+
type GetUniformsFunc = (props?: Record<string, any>) => Record<string, any>;
|
|
26
28
|
/** Efficiently create shared pipelines with varying parameters */
|
|
27
|
-
export
|
|
29
|
+
export declare class PipelineFactory {
|
|
28
30
|
readonly device: Device;
|
|
29
31
|
stateHash: number;
|
|
30
32
|
private _hashCounter;
|
|
@@ -36,20 +38,23 @@ export default class PipelineFactory {
|
|
|
36
38
|
private _defaultModules;
|
|
37
39
|
static getDefaultPipelineFactory(device: Device): PipelineFactory;
|
|
38
40
|
constructor(device: Device);
|
|
39
|
-
|
|
41
|
+
addDefaultModule(module: ShaderModule): void;
|
|
42
|
+
removeDefaultModule(module: ShaderModule): void;
|
|
43
|
+
addShaderHook(hook: string, opts?: any): void;
|
|
40
44
|
createRenderPipeline(options: GetRenderPipelineOptions): {
|
|
41
|
-
|
|
42
|
-
getUniforms:
|
|
45
|
+
pipeline: RenderPipeline;
|
|
46
|
+
getUniforms: GetUniformsFunc;
|
|
43
47
|
};
|
|
44
48
|
release(pipeline: RenderPipeline): void;
|
|
45
|
-
getUniforms(pipeline: RenderPipeline):
|
|
49
|
+
getUniforms(pipeline: RenderPipeline): GetUniformsFunc;
|
|
46
50
|
_createRenderPipeline(props: GetRenderPipelineOptions): {
|
|
47
|
-
|
|
48
|
-
getUniforms:
|
|
51
|
+
pipeline: RenderPipeline;
|
|
52
|
+
getUniforms: GetUniformsFunc;
|
|
49
53
|
};
|
|
50
54
|
/** Calculate a hash based on all the inputs for a render pipeline */
|
|
51
55
|
_hashRenderPipeline(props: GetRenderPipelineOptions): string;
|
|
52
56
|
_getHash(key: string): number;
|
|
53
57
|
_getModuleList(appModules?: ShaderModule[]): ShaderModule[];
|
|
54
58
|
}
|
|
59
|
+
export {};
|
|
55
60
|
//# 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":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"pipeline-factory.d.ts","sourceRoot":"","sources":["../../src/lib/pipeline-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,185 +7,174 @@ const DEFAULT_RENDER_PIPELINE_OPTIONS = {
|
|
|
7
7
|
defines: {},
|
|
8
8
|
inject: {},
|
|
9
9
|
transpileToGLSL100: false,
|
|
10
|
+
layout: null,
|
|
10
11
|
varyings: [],
|
|
11
12
|
bufferMode: 0x8c8d,
|
|
12
13
|
topology: 'triangle-list',
|
|
13
14
|
parameters: {}
|
|
14
15
|
};
|
|
15
|
-
export
|
|
16
|
+
export class PipelineFactory {
|
|
16
17
|
static getDefaultPipelineFactory(device) {
|
|
17
18
|
device.defaultPipelineFactory = device.defaultPipelineFactory || new PipelineFactory(device);
|
|
18
19
|
return device.defaultPipelineFactory;
|
|
19
20
|
}
|
|
20
|
-
|
|
21
21
|
constructor(device) {
|
|
22
22
|
_defineProperty(this, "device", void 0);
|
|
23
|
-
|
|
24
23
|
_defineProperty(this, "stateHash", 0);
|
|
25
|
-
|
|
26
24
|
_defineProperty(this, "_hashCounter", 0);
|
|
27
|
-
|
|
28
25
|
_defineProperty(this, "_hashes", {});
|
|
29
|
-
|
|
30
26
|
_defineProperty(this, "_useCounts", {});
|
|
31
|
-
|
|
32
27
|
_defineProperty(this, "_pipelineCache", {});
|
|
33
|
-
|
|
34
28
|
_defineProperty(this, "_getUniforms", {});
|
|
35
|
-
|
|
36
29
|
_defineProperty(this, "_hookFunctions", []);
|
|
37
|
-
|
|
38
30
|
_defineProperty(this, "_defaultModules", []);
|
|
39
|
-
|
|
40
31
|
this.device = device;
|
|
41
32
|
}
|
|
42
|
-
|
|
33
|
+
addDefaultModule(module) {
|
|
34
|
+
if (!this._defaultModules.find(m => m.name === (typeof module === 'string' ? module : module.name))) {
|
|
35
|
+
this._defaultModules.push(module);
|
|
36
|
+
}
|
|
37
|
+
this.stateHash++;
|
|
38
|
+
}
|
|
39
|
+
removeDefaultModule(module) {
|
|
40
|
+
const moduleName = typeof module === 'string' ? module : module.name;
|
|
41
|
+
this._defaultModules = this._defaultModules.filter(m => m.name !== moduleName);
|
|
42
|
+
this.stateHash++;
|
|
43
|
+
}
|
|
43
44
|
addShaderHook(hook, opts) {
|
|
44
45
|
if (opts) {
|
|
45
46
|
hook = Object.assign(opts, {
|
|
46
47
|
hook
|
|
47
48
|
});
|
|
48
49
|
}
|
|
49
|
-
|
|
50
50
|
this._hookFunctions.push(hook);
|
|
51
|
-
|
|
52
51
|
this.stateHash++;
|
|
53
52
|
}
|
|
54
|
-
|
|
55
53
|
createRenderPipeline(options) {
|
|
56
|
-
const props = {
|
|
54
|
+
const props = {
|
|
55
|
+
...DEFAULT_RENDER_PIPELINE_OPTIONS,
|
|
57
56
|
...options
|
|
58
57
|
};
|
|
59
|
-
|
|
60
58
|
const modules = this._getModuleList(props.modules);
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
const hash = this._hashRenderPipeline({
|
|
60
|
+
...props,
|
|
63
61
|
modules
|
|
64
62
|
});
|
|
65
|
-
|
|
66
63
|
if (!this._pipelineCache[hash]) {
|
|
67
64
|
const {
|
|
68
|
-
|
|
65
|
+
pipeline,
|
|
69
66
|
getUniforms
|
|
70
|
-
} = this._createRenderPipeline({
|
|
67
|
+
} = this._createRenderPipeline({
|
|
68
|
+
...props,
|
|
71
69
|
modules
|
|
72
70
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
this.
|
|
76
|
-
|
|
77
|
-
this._getUniforms[hash] = getUniforms || (x => {});
|
|
78
|
-
|
|
71
|
+
pipeline.hash = hash;
|
|
72
|
+
this._pipelineCache[hash] = pipeline;
|
|
73
|
+
this._getUniforms[hash] = getUniforms || (x => ({}));
|
|
79
74
|
this._useCounts[hash] = 0;
|
|
80
75
|
}
|
|
81
|
-
|
|
82
76
|
this._useCounts[hash]++;
|
|
83
77
|
return {
|
|
84
|
-
|
|
78
|
+
pipeline: this._pipelineCache[hash],
|
|
85
79
|
getUniforms: this._getUniforms[hash]
|
|
86
80
|
};
|
|
87
81
|
}
|
|
88
|
-
|
|
89
82
|
release(pipeline) {
|
|
90
83
|
const hash = pipeline.hash;
|
|
91
84
|
this._useCounts[hash]--;
|
|
92
|
-
|
|
93
85
|
if (this._useCounts[hash] === 0) {
|
|
94
86
|
this._pipelineCache[hash].destroy();
|
|
95
|
-
|
|
96
87
|
delete this._pipelineCache[hash];
|
|
97
88
|
delete this._getUniforms[hash];
|
|
98
89
|
delete this._useCounts[hash];
|
|
99
90
|
}
|
|
100
91
|
}
|
|
101
|
-
|
|
102
92
|
getUniforms(pipeline) {
|
|
103
93
|
return this._getUniforms[pipeline.hash] || null;
|
|
104
94
|
}
|
|
105
|
-
|
|
106
95
|
_createRenderPipeline(props) {
|
|
107
96
|
const platformInfo = {
|
|
108
97
|
gpu: this.device.info.gpu,
|
|
109
98
|
features: this.device.features
|
|
110
99
|
};
|
|
111
|
-
|
|
100
|
+
if (!props.fs) {
|
|
101
|
+
throw new Error('fs');
|
|
102
|
+
}
|
|
103
|
+
const assembled = assembleShaders(platformInfo, {
|
|
104
|
+
...props,
|
|
105
|
+
fs: props.fs,
|
|
112
106
|
hookFunctions: this._hookFunctions
|
|
113
107
|
});
|
|
114
|
-
const
|
|
108
|
+
const pipeline = this.device.createRenderPipeline({
|
|
109
|
+
...props,
|
|
115
110
|
vs: this.device.createShader({
|
|
116
111
|
stage: 'vertex',
|
|
117
112
|
source: assembled.vs
|
|
118
113
|
}),
|
|
119
|
-
fs: assembled.fs
|
|
114
|
+
fs: assembled.fs ? this.device.createShader({
|
|
120
115
|
stage: 'fragment',
|
|
121
116
|
source: assembled.fs
|
|
122
|
-
})
|
|
117
|
+
}) : null
|
|
123
118
|
});
|
|
124
119
|
return {
|
|
125
|
-
|
|
120
|
+
pipeline,
|
|
126
121
|
getUniforms: assembled.getUniforms
|
|
127
122
|
};
|
|
128
123
|
}
|
|
129
|
-
|
|
130
124
|
_hashRenderPipeline(props) {
|
|
125
|
+
const {
|
|
126
|
+
modules = [],
|
|
127
|
+
varyings = [],
|
|
128
|
+
defines = {},
|
|
129
|
+
inject = {},
|
|
130
|
+
parameters = {}
|
|
131
|
+
} = props;
|
|
131
132
|
const vsHash = this._getHash(props.vs);
|
|
132
|
-
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
const
|
|
136
|
-
const
|
|
137
|
-
const defineKeys = Object.keys(props.defines).sort();
|
|
138
|
-
const injectKeys = Object.keys(props.inject).sort();
|
|
133
|
+
const fsHash = props.fs ? this._getHash(props.fs) : 0;
|
|
134
|
+
const moduleHashes = modules.map(m => this._getHash(typeof m === 'string' ? m : m.name)).sort();
|
|
135
|
+
const varyingHashes = varyings.map(v => this._getHash(v));
|
|
136
|
+
const defineKeys = Object.keys(defines).sort();
|
|
137
|
+
const injectKeys = Object.keys(inject).sort();
|
|
139
138
|
const defineHashes = [];
|
|
140
139
|
const injectHashes = [];
|
|
141
|
-
|
|
142
140
|
for (const key of defineKeys) {
|
|
143
141
|
defineHashes.push(this._getHash(key));
|
|
144
|
-
defineHashes.push(this._getHash(
|
|
142
|
+
defineHashes.push(this._getHash(String(defines[key])));
|
|
145
143
|
}
|
|
146
|
-
|
|
147
144
|
for (const key of injectKeys) {
|
|
148
145
|
injectHashes.push(this._getHash(key));
|
|
149
|
-
injectHashes.push(this._getHash(
|
|
146
|
+
injectHashes.push(this._getHash(inject[key]));
|
|
150
147
|
}
|
|
151
|
-
|
|
152
|
-
const parameterHash = JSON.stringify(props.parameters);
|
|
148
|
+
const parameterHash = JSON.stringify(parameters);
|
|
153
149
|
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
150
|
}
|
|
155
|
-
|
|
156
151
|
_getHash(key) {
|
|
157
152
|
if (this._hashes[key] === undefined) {
|
|
158
153
|
this._hashes[key] = this._hashCounter++;
|
|
159
154
|
}
|
|
160
|
-
|
|
161
155
|
return this._hashes[key];
|
|
162
156
|
}
|
|
163
|
-
|
|
164
|
-
|
|
157
|
+
_getModuleList() {
|
|
158
|
+
let appModules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
165
159
|
const modules = new Array(this._defaultModules.length + appModules.length);
|
|
166
160
|
const seen = {};
|
|
167
161
|
let count = 0;
|
|
168
|
-
|
|
169
162
|
for (let i = 0, len = this._defaultModules.length; i < len; ++i) {
|
|
170
163
|
const module = this._defaultModules[i];
|
|
171
164
|
const name = module.name;
|
|
172
165
|
modules[count++] = module;
|
|
173
166
|
seen[name] = true;
|
|
174
167
|
}
|
|
175
|
-
|
|
176
168
|
for (let i = 0, len = appModules.length; i < len; ++i) {
|
|
177
169
|
const module = appModules[i];
|
|
178
170
|
const name = module.name;
|
|
179
|
-
|
|
180
171
|
if (!seen[name]) {
|
|
181
172
|
modules[count++] = module;
|
|
182
173
|
seen[name] = true;
|
|
183
174
|
}
|
|
184
175
|
}
|
|
185
|
-
|
|
186
176
|
modules.length = count;
|
|
187
177
|
return modules;
|
|
188
178
|
}
|
|
189
|
-
|
|
190
179
|
}
|
|
191
180
|
//# 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":["assembleShaders","DEFAULT_RENDER_PIPELINE_OPTIONS","vs","fs","modules","defines","inject","transpileToGLSL100","layout","varyings","bufferMode","topology","parameters","PipelineFactory","getDefaultPipelineFactory","device","defaultPipelineFactory","constructor","_defineProperty","addDefaultModule","module","_defaultModules","find","m","name","push","stateHash","removeDefaultModule","moduleName","filter","addShaderHook","hook","opts","Object","assign","_hookFunctions","createRenderPipeline","options","props","_getModuleList","hash","_hashRenderPipeline","_pipelineCache","pipeline","getUniforms","_createRenderPipeline","_getUniforms","x","_useCounts","release","destroy","platformInfo","gpu","info","features","Error","assembled","hookFunctions","createShader","stage","source","vsHash","_getHash","fsHash","moduleHashes","map","sort","varyingHashes","v","defineKeys","keys","injectKeys","defineHashes","injectHashes","key","String","parameterHash","JSON","stringify","concat","join","_hashes","undefined","_hashCounter","appModules","arguments","length","Array","seen","count","i","len"],"sources":["../../src/lib/pipeline-factory.ts"],"sourcesContent":["import type {RenderPipelineParameters, PrimitiveTopology, ShaderLayout} from '@luma.gl/core';\nimport {Device, RenderPipeline} from '@luma.gl/core';\nimport type { ShaderModule } from '@luma.gl/shadertools';\nimport {assembleShaders} from '@luma.gl/shadertools';\n\nexport type GetRenderPipelineOptions = {\n vs: string;\n fs: string | null;\n topology: PrimitiveTopology;\n layout?: ShaderLayout | null;\n parameters?: RenderPipelineParameters;\n\n modules?: ShaderModule[];\n defines?: Record<string, string | number | boolean>;\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 layout: null,\n\n varyings: [],\n bufferMode: 0x8c8d, // // varyings/bufferMode for xform feedback, 0x8c8d: SEPARATE_ATTRIBS\n topology: 'triangle-list',\n parameters: {} \n};\n\ntype GetUniformsFunc = (props?: Record<string, any>) => Record<string, any>;\n\n/** Efficiently create shared pipelines with varying parameters */\nexport 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, GetUniformsFunc> = {};\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: string, opts?: any): 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 pipeline: RenderPipeline;\n getUniforms: GetUniformsFunc;\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 {pipeline, getUniforms} = this._createRenderPipeline({...props, modules});\n pipeline.hash = hash;\n this._pipelineCache[hash] = pipeline;\n this._getUniforms[hash] = getUniforms || ((x?: unknown) => ({}));\n this._useCounts[hash] = 0;\n }\n\n this._useCounts[hash]++;\n\n return {\n pipeline: 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 pipeline: RenderPipeline,\n getUniforms: GetUniformsFunc\n } {\n const platformInfo = {\n gpu: this.device.info.gpu,\n features: this.device.features\n };\n\n if (!props.fs) {\n throw new Error('fs');\n }\n\n const assembled = assembleShaders(platformInfo, {...props, fs: props.fs, hookFunctions: this._hookFunctions});\n\n const pipeline = 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}) : null,\n });\n\n return {pipeline, 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 {modules = [], varyings = [], defines = {}, inject = {}, parameters = {}} = props;\n const vsHash = this._getHash(props.vs);\n const fsHash = props.fs ? this._getHash(props.fs) : 0;\n\n const moduleHashes = modules.map((m) => this._getHash(typeof m === 'string' ? m : m.name)).sort();\n const varyingHashes = varyings.map((v) => this._getHash(v));\n\n const defineKeys = Object.keys(defines).sort();\n const injectKeys = Object.keys(inject).sort();\n const defineHashes: number[] = [];\n const injectHashes: number[] = [];\n\n for (const key of defineKeys) {\n defineHashes.push(this._getHash(key));\n defineHashes.push(this._getHash(String(defines[key])));\n }\n\n for (const key of injectKeys) {\n injectHashes.push(this._getHash(key));\n injectHashes.push(this._getHash(inject[key]));\n }\n\n // TODO - hash parameters!\n const parameterHash = JSON.stringify(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"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Device, Buffer } from '@luma.gl/
|
|
2
|
-
import type Geometry from '../geometry/geometry';
|
|
1
|
+
import { Device, Buffer } from '@luma.gl/core';
|
|
2
|
+
import type { Geometry } from '../geometry/geometry';
|
|
3
3
|
export declare function getIndexBufferFromGeometry(device: Device, geometry: Geometry): Buffer | undefined;
|
|
4
4
|
export declare function getAttributeBuffersFromGeometry(device: Device, geometry: Geometry): Record<string, Buffer>;
|
|
5
5
|
//# sourceMappingURL=model-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-utils.d.ts","sourceRoot":"","sources":["../../src/model/model-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAS,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAsDnD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAYjG;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc1G"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Buffer, assert } from '@luma.gl/
|
|
1
|
+
import { Buffer, assert } from '@luma.gl/core';
|
|
2
2
|
const GLTF_TO_LUMA_ATTRIBUTE_MAP = {
|
|
3
3
|
POSITION: 'positions',
|
|
4
4
|
NORMAL: 'normals',
|
|
@@ -11,7 +11,6 @@ export function getIndexBufferFromGeometry(device, geometry) {
|
|
|
11
11
|
if (!geometry.indices) {
|
|
12
12
|
return undefined;
|
|
13
13
|
}
|
|
14
|
-
|
|
15
14
|
const data = geometry.indices.value || geometry.indices;
|
|
16
15
|
assert(data instanceof Uint16Array || data instanceof Uint32Array, 'attribute array for "indices" must be of integer type');
|
|
17
16
|
return device.createBuffer({
|
|
@@ -21,24 +20,20 @@ export function getIndexBufferFromGeometry(device, geometry) {
|
|
|
21
20
|
}
|
|
22
21
|
export function getAttributeBuffersFromGeometry(device, geometry) {
|
|
23
22
|
const buffers = {};
|
|
24
|
-
|
|
25
23
|
for (const [name, attribute] of Object.entries(geometry.attributes)) {
|
|
26
24
|
const remappedName = mapAttributeName(name);
|
|
27
|
-
|
|
28
|
-
if (attribute.constant) {
|
|
25
|
+
if (attribute !== null && attribute !== void 0 && attribute.constant) {
|
|
29
26
|
throw new Error('constant attributes not supported');
|
|
30
27
|
} else {
|
|
31
|
-
const typedArray = attribute.value;
|
|
28
|
+
const typedArray = attribute === null || attribute === void 0 ? void 0 : attribute.value;
|
|
32
29
|
buffers[remappedName] = device.createBuffer({
|
|
33
30
|
data: typedArray,
|
|
34
31
|
id: "".concat(remappedName, "-buffer")
|
|
35
32
|
});
|
|
36
33
|
}
|
|
37
34
|
}
|
|
38
|
-
|
|
39
35
|
return buffers;
|
|
40
36
|
}
|
|
41
|
-
|
|
42
37
|
function mapAttributeName(name) {
|
|
43
38
|
return GLTF_TO_LUMA_ATTRIBUTE_MAP[name] || name;
|
|
44
39
|
}
|