@luma.gl/engine 9.0.0-alpha.5 → 9.0.0-alpha.50
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
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Buffer, Device, Framebuffer, RenderPassProps, Sampler, Texture } from '@luma.gl/core';
|
|
2
|
+
import { Model, ModelProps } from '../model/model';
|
|
3
|
+
/**
|
|
4
|
+
* Properties for creating a {@link TextureTransform}
|
|
5
|
+
* @deprecated
|
|
6
|
+
*/
|
|
7
|
+
export type TextureTransformProps = Omit<ModelProps, 'fs'> & {
|
|
8
|
+
fs?: ModelProps['fs'];
|
|
9
|
+
/** @deprecated TODO(donmccurdy): Needed? */
|
|
10
|
+
inject?: Record<string, string>;
|
|
11
|
+
/** @deprecated TODO(donmccurdy): Needed? */
|
|
12
|
+
framebuffer?: Framebuffer;
|
|
13
|
+
/** @deprecated TODO(donmccurdy): Model already handles this? */
|
|
14
|
+
sourceBuffers?: Record<string, Buffer>;
|
|
15
|
+
/** @deprecated TODO(donmccurdy): Model already handles this? */
|
|
16
|
+
sourceTextures?: Record<string, Texture>;
|
|
17
|
+
targetTexture: Texture;
|
|
18
|
+
targetTextureChannels: 1 | 2 | 3 | 4;
|
|
19
|
+
targetTextureVarying: string;
|
|
20
|
+
};
|
|
21
|
+
type TextureBinding = {
|
|
22
|
+
sourceBuffers: Record<string, Buffer>;
|
|
23
|
+
sourceTextures: Record<string, Texture>;
|
|
24
|
+
targetTexture: Texture;
|
|
25
|
+
framebuffer?: Framebuffer;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Creates a pipeline for texture→texture transforms.
|
|
29
|
+
* @deprecated
|
|
30
|
+
*/
|
|
31
|
+
export declare class TextureTransform {
|
|
32
|
+
readonly device: Device;
|
|
33
|
+
readonly model: Model;
|
|
34
|
+
readonly sampler: Sampler;
|
|
35
|
+
currentIndex: number;
|
|
36
|
+
samplerTextureMap: Record<string, any> | null;
|
|
37
|
+
bindings: TextureBinding[];
|
|
38
|
+
resources: Record<string, any>;
|
|
39
|
+
constructor(device: Device, props: TextureTransformProps);
|
|
40
|
+
destroy(): void;
|
|
41
|
+
/** @deprecated Use {@link destroy}. */
|
|
42
|
+
delete(): void;
|
|
43
|
+
run(options?: RenderPassProps): void;
|
|
44
|
+
/** @deprecated */
|
|
45
|
+
update(...args: any[]): void;
|
|
46
|
+
getData({ packed }?: {
|
|
47
|
+
packed?: boolean;
|
|
48
|
+
}): void;
|
|
49
|
+
getTargetTexture(): Texture;
|
|
50
|
+
getFramebuffer(): Framebuffer;
|
|
51
|
+
_initialize(props: TextureTransformProps): void;
|
|
52
|
+
_updateBindings(props: TextureTransformProps): void;
|
|
53
|
+
_updateBinding(binding: TextureBinding, { sourceBuffers, sourceTextures, targetTexture }: TextureTransformProps): TextureBinding;
|
|
54
|
+
_setSourceTextureParameters(): void;
|
|
55
|
+
}
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=texture-transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texture-transform.d.ts","sourceRoot":"","sources":["../../src/transform/texture-transform.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGnD;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG;IAC3D,EAAE,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IACtB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,4CAA4C;IAC5C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,aAAa,EAAE,OAAO,CAAC;IACvB,qBAAqB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAGF,KAAK,cAAc,GAAG;IACpB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAIF;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,YAAY,SAAK;IACjB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAQ;IACrD,QAAQ,EAAE,cAAc,EAAE,CAAM;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;gBAExB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB;IA6BxD,OAAO,IAAI,IAAI;IAEf,uCAAuC;IACvC,MAAM,IAAI,IAAI;IAId,GAAG,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;IAOpC,kBAAkB;IAClB,MAAM,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ5B,OAAO,CAAC,EAAC,MAAc,EAAC;;KAAK;IAM7B,gBAAgB,IAAI,OAAO;IAM3B,cAAc,IAAI,WAAW;IAO7B,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAI/C,eAAe,CAAC,KAAK,EAAE,qBAAqB;IAI5C,cAAc,CACZ,OAAO,EAAE,cAAc,EACvB,EAAC,aAAa,EAAE,cAAc,EAAE,aAAa,EAAC,EAAE,qBAAqB,GACpE,cAAc;IA6BjB,2BAA2B,IAAI,IAAI;CAOpC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Model } from "../model/model.js";
|
|
2
|
+
import { getPassthroughFS } from '@luma.gl/shadertools';
|
|
3
|
+
const FS_OUTPUT_VARIABLE = 'transform_output';
|
|
4
|
+
export class TextureTransform {
|
|
5
|
+
constructor(device, props) {
|
|
6
|
+
this.device = void 0;
|
|
7
|
+
this.model = void 0;
|
|
8
|
+
this.sampler = void 0;
|
|
9
|
+
this.currentIndex = 0;
|
|
10
|
+
this.samplerTextureMap = null;
|
|
11
|
+
this.bindings = [];
|
|
12
|
+
this.resources = {};
|
|
13
|
+
this.device = device;
|
|
14
|
+
this.sampler = device.createSampler({
|
|
15
|
+
addressModeU: 'clamp-to-edge',
|
|
16
|
+
addressModeV: 'clamp-to-edge',
|
|
17
|
+
minFilter: 'nearest',
|
|
18
|
+
magFilter: 'nearest',
|
|
19
|
+
mipmapFilter: 'nearest'
|
|
20
|
+
});
|
|
21
|
+
this.model = new Model(this.device, {
|
|
22
|
+
id: props.id || 'texture-transform-model',
|
|
23
|
+
fs: props.fs || getPassthroughFS({
|
|
24
|
+
version: 300,
|
|
25
|
+
input: props.targetTextureVarying,
|
|
26
|
+
inputChannels: props.targetTextureChannels,
|
|
27
|
+
output: FS_OUTPUT_VARIABLE
|
|
28
|
+
}),
|
|
29
|
+
vertexCount: props.vertexCount,
|
|
30
|
+
...props
|
|
31
|
+
});
|
|
32
|
+
this._initialize(props);
|
|
33
|
+
Object.seal(this);
|
|
34
|
+
}
|
|
35
|
+
destroy() {}
|
|
36
|
+
delete() {
|
|
37
|
+
this.destroy();
|
|
38
|
+
}
|
|
39
|
+
run(options) {
|
|
40
|
+
const {
|
|
41
|
+
framebuffer
|
|
42
|
+
} = this.bindings[this.currentIndex];
|
|
43
|
+
const renderPass = this.device.beginRenderPass({
|
|
44
|
+
framebuffer,
|
|
45
|
+
...options
|
|
46
|
+
});
|
|
47
|
+
this.model.draw(renderPass);
|
|
48
|
+
renderPass.end();
|
|
49
|
+
}
|
|
50
|
+
update() {
|
|
51
|
+
console.warn('TextureTransform#update() not implemented');
|
|
52
|
+
}
|
|
53
|
+
getData() {
|
|
54
|
+
let {
|
|
55
|
+
packed = false
|
|
56
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
57
|
+
throw new Error('getData() not implemented');
|
|
58
|
+
}
|
|
59
|
+
getTargetTexture() {
|
|
60
|
+
const {
|
|
61
|
+
targetTexture
|
|
62
|
+
} = this.bindings[this.currentIndex];
|
|
63
|
+
return targetTexture;
|
|
64
|
+
}
|
|
65
|
+
getFramebuffer() {
|
|
66
|
+
const currentResources = this.bindings[this.currentIndex];
|
|
67
|
+
return currentResources.framebuffer;
|
|
68
|
+
}
|
|
69
|
+
_initialize(props) {
|
|
70
|
+
this._updateBindings(props);
|
|
71
|
+
}
|
|
72
|
+
_updateBindings(props) {
|
|
73
|
+
this.bindings[this.currentIndex] = this._updateBinding(this.bindings[this.currentIndex], props);
|
|
74
|
+
}
|
|
75
|
+
_updateBinding(binding, _ref) {
|
|
76
|
+
let {
|
|
77
|
+
sourceBuffers,
|
|
78
|
+
sourceTextures,
|
|
79
|
+
targetTexture
|
|
80
|
+
} = _ref;
|
|
81
|
+
if (!binding) {
|
|
82
|
+
binding = {
|
|
83
|
+
sourceBuffers: {},
|
|
84
|
+
sourceTextures: {},
|
|
85
|
+
targetTexture: null
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
Object.assign(binding.sourceTextures, sourceTextures);
|
|
89
|
+
Object.assign(binding.sourceBuffers, sourceBuffers);
|
|
90
|
+
if (targetTexture) {
|
|
91
|
+
binding.targetTexture = targetTexture;
|
|
92
|
+
const {
|
|
93
|
+
width,
|
|
94
|
+
height
|
|
95
|
+
} = targetTexture;
|
|
96
|
+
if (binding.framebuffer) {
|
|
97
|
+
binding.framebuffer.destroy();
|
|
98
|
+
}
|
|
99
|
+
binding.framebuffer = this.device.createFramebuffer({
|
|
100
|
+
id: 'transform-framebuffer',
|
|
101
|
+
width,
|
|
102
|
+
height,
|
|
103
|
+
colorAttachments: [targetTexture]
|
|
104
|
+
});
|
|
105
|
+
binding.framebuffer.resize({
|
|
106
|
+
width,
|
|
107
|
+
height
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return binding;
|
|
111
|
+
}
|
|
112
|
+
_setSourceTextureParameters() {
|
|
113
|
+
const index = this.currentIndex;
|
|
114
|
+
const {
|
|
115
|
+
sourceTextures
|
|
116
|
+
} = this.bindings[index];
|
|
117
|
+
for (const name in sourceTextures) {
|
|
118
|
+
sourceTextures[name].sampler = this.sampler;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=texture-transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texture-transform.js","names":["Model","getPassthroughFS","FS_OUTPUT_VARIABLE","TextureTransform","constructor","device","props","model","sampler","currentIndex","samplerTextureMap","bindings","resources","createSampler","addressModeU","addressModeV","minFilter","magFilter","mipmapFilter","id","fs","version","input","targetTextureVarying","inputChannels","targetTextureChannels","output","vertexCount","_initialize","Object","seal","destroy","delete","run","options","framebuffer","renderPass","beginRenderPass","draw","end","update","console","warn","getData","packed","arguments","length","undefined","Error","getTargetTexture","targetTexture","getFramebuffer","currentResources","_updateBindings","_updateBinding","binding","_ref","sourceBuffers","sourceTextures","assign","width","height","createFramebuffer","colorAttachments","resize","_setSourceTextureParameters","index","name"],"sources":["../../src/transform/texture-transform.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport { Buffer, Device, Framebuffer, RenderPassProps, Sampler, Texture } from '@luma.gl/core';\nimport { Model, ModelProps } from '../model/model';\nimport { getPassthroughFS } from '@luma.gl/shadertools';\n\n/**\n * Properties for creating a {@link TextureTransform}\n * @deprecated\n */\nexport type TextureTransformProps = Omit<ModelProps, 'fs'> & {\n fs?: ModelProps['fs']; // override as optional\n /** @deprecated TODO(donmccurdy): Needed? */\n inject?: Record<string, string>;\n /** @deprecated TODO(donmccurdy): Needed? */\n framebuffer?: Framebuffer;\n /** @deprecated TODO(donmccurdy): Model already handles this? */\n sourceBuffers?: Record<string, Buffer>;\n /** @deprecated TODO(donmccurdy): Model already handles this? */\n sourceTextures?: Record<string, Texture>;\n targetTexture: Texture;\n targetTextureChannels: 1 | 2 | 3 | 4;\n targetTextureVarying: string;\n};\n\n\ntype TextureBinding = {\n sourceBuffers: Record<string, Buffer>;\n sourceTextures: Record<string, Texture>;\n targetTexture: Texture;\n framebuffer?: Framebuffer;\n};\n\nconst FS_OUTPUT_VARIABLE = 'transform_output';\n\n/**\n * Creates a pipeline for texture→texture transforms.\n * @deprecated\n */\nexport class TextureTransform {\n readonly device: Device;\n readonly model: Model;\n readonly sampler: Sampler;\n \n currentIndex = 0;\n samplerTextureMap: Record<string, any> | null = null;\n bindings: TextureBinding[] = []; // each element is an object : {sourceTextures, targetTexture, framebuffer}\n resources: Record<string, any> = {}; // resources to be deleted\n\n constructor(device: Device, props: TextureTransformProps) {\n this.device = device;\n\n // For precise picking of element IDs.\n this.sampler = device.createSampler({\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge',\n minFilter: 'nearest',\n magFilter: 'nearest',\n mipmapFilter: 'nearest',\n });\n\n this.model = new Model(this.device, {\n id: props.id || 'texture-transform-model',\n fs: props.fs || getPassthroughFS({\n version: 300,\n input: props.targetTextureVarying,\n inputChannels: props.targetTextureChannels,\n output: FS_OUTPUT_VARIABLE\n }),\n vertexCount: props.vertexCount, // TODO(donmccurdy): Naming?\n ...props\n });\n\n this._initialize(props);\n Object.seal(this);\n }\n\n // Delete owned resources.\n destroy(): void {}\n\n /** @deprecated Use {@link destroy}. */\n delete(): void {\n this.destroy();\n }\n\n run(options?: RenderPassProps): void {\n const {framebuffer} = this.bindings[this.currentIndex];\n const renderPass = this.device.beginRenderPass({framebuffer, ...options});\n this.model.draw(renderPass);\n renderPass.end();\n }\n\n /** @deprecated */\n update(...args: any[]): void {\n // TODO(v9): Method should likely be removed for v9. Keeping a method stub\n // to assist with migrating DeckGL usage.\n // eslint-disable-next-line no-console\n console.warn('TextureTransform#update() not implemented');\n }\n\n\n getData({packed = false} = {}) {\n // TODO(v9): Method should likely be removed for v9. Keeping a method stub\n // to assist with migrating DeckGL usage.\n throw new Error('getData() not implemented');\n }\n\n getTargetTexture(): Texture {\n const {targetTexture} = this.bindings[this.currentIndex];\n return targetTexture;\n }\n\n\n getFramebuffer(): Framebuffer {\n const currentResources = this.bindings[this.currentIndex];\n return currentResources.framebuffer;\n }\n\n // Private\n\n _initialize(props: TextureTransformProps): void {\n this._updateBindings(props);\n }\n\n _updateBindings(props: TextureTransformProps) {\n this.bindings[this.currentIndex] = this._updateBinding(this.bindings[this.currentIndex], props);\n }\n\n _updateBinding(\n binding: TextureBinding,\n {sourceBuffers, sourceTextures, targetTexture}: TextureTransformProps\n ): TextureBinding {\n if (!binding) {\n binding = {\n sourceBuffers: {},\n sourceTextures: {},\n targetTexture: null\n };\n }\n Object.assign(binding.sourceTextures, sourceTextures);\n Object.assign(binding.sourceBuffers, sourceBuffers);\n if (targetTexture) {\n binding.targetTexture = targetTexture;\n const {width, height} = targetTexture;\n // TODO(donmccurdy): When is this called, and is this expected?\n if (binding.framebuffer) {\n binding.framebuffer.destroy();\n }\n binding.framebuffer = this.device.createFramebuffer({\n id: 'transform-framebuffer',\n width,\n height,\n colorAttachments: [targetTexture]\n });\n binding.framebuffer.resize({width, height});\n }\n return binding;\n }\n\n // set texture filtering parameters on source textures.\n _setSourceTextureParameters(): void {\n const index = this.currentIndex;\n const {sourceTextures} = this.bindings[index];\n for (const name in sourceTextures) {\n sourceTextures[name].sampler = this.sampler;\n }\n }\n}\n"],"mappings":"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"}
|