@luma.gl/engine 9.0.0-alpha.46 → 9.0.0-alpha.48
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 +34 -0
- package/dist/animation-loop/animation-loop.d.ts.map +1 -1
- package/dist/animation-loop/animation-loop.js +1 -4
- package/dist/animation-loop/animation-loop.js.map +1 -1
- package/dist/dist.dev.js +608 -834
- package/dist/geometry/gpu-geometry.d.ts.map +1 -1
- package/dist/geometry/gpu-geometry.js +7 -2
- package/dist/geometry/gpu-geometry.js.map +1 -1
- package/dist/index.cjs +481 -402
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/clip-space.js +6 -6
- package/dist/lib/clip-space.js.map +1 -1
- package/dist/model/model.d.ts +24 -14
- package/dist/model/model.d.ts.map +1 -1
- package/dist/model/model.js +50 -18
- package/dist/model/model.js.map +1 -1
- package/dist/shader-inputs.d.ts +62 -0
- package/dist/shader-inputs.d.ts.map +1 -0
- package/dist/shader-inputs.js +48 -0
- package/dist/shader-inputs.js.map +1 -0
- package/dist/transform/transform.d.ts +24 -57
- package/dist/transform/transform.d.ts.map +1 -1
- package/dist/transform/transform.js +66 -24
- package/dist/transform/transform.js.map +1 -1
- package/dist.min.js +106 -84
- package/package.json +5 -5
- package/src/animation-loop/animation-loop.ts +1 -5
- package/src/geometry/gpu-geometry.ts +3 -2
- package/src/index.ts +3 -3
- package/src/lib/clip-space.ts +6 -6
- package/src/model/model.ts +84 -55
- package/src/shader-inputs.ts +131 -0
- package/src/transform/transform.ts +125 -113
- package/dist/shadertools/shader-module-uniforms.d.ts +0 -36
- package/dist/shadertools/shader-module-uniforms.d.ts.map +0 -1
- package/dist/shadertools/shader-module-uniforms.js +0 -87
- package/dist/shadertools/shader-module-uniforms.js.map +0 -1
- package/src/shadertools/shader-module-uniforms.ts +0 -178
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { log } from '@luma.gl/core';
|
|
2
|
+
import { _resolveModules } from '@luma.gl/shadertools';
|
|
3
|
+
export class ShaderInputs {
|
|
4
|
+
constructor(modules) {
|
|
5
|
+
this.modules = void 0;
|
|
6
|
+
this.moduleUniforms = void 0;
|
|
7
|
+
this.moduleBindings = void 0;
|
|
8
|
+
this.moduleUniformsChanged = void 0;
|
|
9
|
+
const allModules = _resolveModules(Object.values(modules));
|
|
10
|
+
log.log(1, 'Creating ShaderInputs with modules', allModules.map(m => m.name))();
|
|
11
|
+
this.modules = modules;
|
|
12
|
+
this.moduleUniforms = {};
|
|
13
|
+
this.moduleBindings = {};
|
|
14
|
+
for (const [name, module] of Object.entries(modules)) {
|
|
15
|
+
var _module$getUniforms;
|
|
16
|
+
const moduleName = name;
|
|
17
|
+
this.moduleUniforms[moduleName] = ((_module$getUniforms = module.getUniforms) === null || _module$getUniforms === void 0 ? void 0 : _module$getUniforms.call(module, {})) || module.defaultUniforms || {};
|
|
18
|
+
this.moduleBindings[moduleName] = {};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
destroy() {}
|
|
22
|
+
setProps(props) {
|
|
23
|
+
for (const name of Object.keys(props)) {
|
|
24
|
+
var _module$getUniforms2;
|
|
25
|
+
const moduleName = name;
|
|
26
|
+
const moduleProps = props[moduleName];
|
|
27
|
+
const module = this.modules[moduleName];
|
|
28
|
+
const uniforms = (_module$getUniforms2 = module.getUniforms) === null || _module$getUniforms2 === void 0 ? void 0 : _module$getUniforms2.call(module, moduleProps, this.moduleUniforms[moduleName]);
|
|
29
|
+
console.error(uniforms);
|
|
30
|
+
this.moduleUniforms[moduleName] = uniforms || moduleProps;
|
|
31
|
+
console.log(`setProps(${String(moduleName)}`, moduleName, this.moduleUniforms[moduleName]);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
getModules() {
|
|
35
|
+
return Object.values(this.modules);
|
|
36
|
+
}
|
|
37
|
+
getUniformValues() {
|
|
38
|
+
return this.moduleUniforms;
|
|
39
|
+
}
|
|
40
|
+
getBindings() {
|
|
41
|
+
const bindings = {};
|
|
42
|
+
for (const moduleBindings of Object.values(this.moduleBindings)) {
|
|
43
|
+
Object.assign(bindings, moduleBindings);
|
|
44
|
+
}
|
|
45
|
+
return bindings;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=shader-inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader-inputs.js","names":["log","_resolveModules","ShaderInputs","constructor","modules","moduleUniforms","moduleBindings","moduleUniformsChanged","allModules","Object","values","map","m","name","module","entries","_module$getUniforms","moduleName","getUniforms","call","defaultUniforms","destroy","setProps","props","keys","_module$getUniforms2","moduleProps","uniforms","console","error","String","getModules","getUniformValues","getBindings","bindings","assign"],"sources":["../src/shader-inputs.ts"],"sourcesContent":["// luma.gl, MIT license\nimport type {UniformValue, Texture, Sampler} from '@luma.gl/core';\nimport {log} from '@luma.gl/core';\n// import type {ShaderUniformType, UniformValue, UniformFormat, UniformInfoDevice, Texture, Sampler} from '@luma.gl/core';\nimport {_resolveModules, ShaderModuleInstance} from '@luma.gl/shadertools'\n\n\n/** Minimal ShaderModule subset, we don't need shader code etc */\nexport type ShaderModuleInputs<\n PropsT extends Record<string, unknown> = Record<string, unknown>,\n UniformsT extends Record<string, UniformValue> = Record<string, UniformValue>,\n BindingsT extends Record<string, Texture | Sampler> = Record<string, Texture | Sampler>\n> = {\n defaultUniforms?: UniformsT;\n getUniforms?: (settings: Partial<PropsT>, prevUniforms?: UniformsT) => UniformsT;\n\n /** Not used. Used to access props type */\n props?: PropsT;\n\n bindings?: Record<\n keyof BindingsT,\n {\n location: number;\n type: 'texture' | 'sampler' | 'uniforms';\n }\n >;\n\n uniformTypes?: any;\n};\n\n/**\n * ShaderInputs holds uniform and binding values for one or more shader modules,\n * - It can generate binary data for any uniform buffer\n * - It can manage a uniform buffer for each block\n * - It can update managed uniform buffers with a single call\n * - It performs some book keeping on what has changed to minimize unnecessary writes to uniform buffers.\n */\nexport class ShaderInputs<\n ShaderPropsT extends Partial<Record<string, Record<string, unknown>>> = Partial<\n Record<string, Record<string, unknown>>\n >\n> {\n /** \n * The map of modules \n * @todo should should this include the resolved dependencies?\n */\n modules: Readonly<{[P in keyof ShaderPropsT]: ShaderModuleInputs<ShaderPropsT[P]>}>;\n\n /** Stores the uniform values for each module */\n moduleUniforms: Record<keyof ShaderPropsT, Record<string, UniformValue>>;\n /** Stores the uniform bindings for each module */\n moduleBindings: Record<keyof ShaderPropsT, Record<string, Texture | Sampler>>;\n /** Tracks if uniforms have changed */\n moduleUniformsChanged: Record<keyof ShaderPropsT, false | string>;\n\n /**\n * Create a new UniformStore instance\n * @param modules\n */\n constructor(modules: {[P in keyof ShaderPropsT]: ShaderModuleInputs<ShaderPropsT[P]>}) {\n // TODO - get all dependencies from modules\n const allModules =_resolveModules(Object.values(modules));\n log.log(1, 'Creating ShaderInputs with modules', allModules.map(m => m.name))();\n\n // Store the module definitions and create storage for uniform values and binding values, per module\n this.modules = modules;\n this.moduleUniforms = {} as Record<keyof ShaderPropsT, Record<string, UniformValue>>;\n this.moduleBindings = {} as Record<keyof ShaderPropsT, Record<string, Texture | Sampler>>;\n\n // Initialize the modules\n for (const [name, module] of Object.entries(modules)) {\n const moduleName = name as keyof ShaderPropsT;\n\n // Get default uniforms from module\n this.moduleUniforms[moduleName] = module.getUniforms?.({}) || module.defaultUniforms || {};\n this.moduleBindings[moduleName] = {};\n }\n }\n\n /** Destroy */\n destroy(): void {}\n\n /**\n * Set module props\n */\n setProps(props: Partial<{[P in keyof ShaderPropsT]?: Partial<ShaderPropsT[P]>}>): void {\n for (const name of Object.keys(props)) {\n const moduleName = name as keyof ShaderPropsT;\n const moduleProps = props[moduleName];\n const module = this.modules[moduleName];\n\n const uniforms = module.getUniforms?.(moduleProps, this.moduleUniforms[moduleName]);\n console.error(uniforms)\n this.moduleUniforms[moduleName] = uniforms || moduleProps as any;\n // this.moduleUniformsChanged ||= moduleName;\n\n console.log(`setProps(${String(moduleName)}`, moduleName, this.moduleUniforms[moduleName])\n\n // TODO - Get Module bindings\n // const bindings = module.getBindings?.(moduleProps);\n // this.moduleUniforms[moduleName] = bindings;\n }\n }\n\n /** Merges all bindings for the shader (from the various modules) */\n // getUniformBlocks(): Record<string, Texture | Sampler> {\n // return this.moduleUniforms;\n // }\n\n /** \n * Return the map of modules \n * @todo should should this include the resolved dependencies?\n */\n getModules(): ShaderModuleInstance[] {\n return Object.values(this.modules);\n }\n\n /** Get all uniform values for all modules */\n getUniformValues(): Record<keyof ShaderPropsT, Record<string, UniformValue>> {\n return this.moduleUniforms;\n }\n\n /** Merges all bindings for the shader (from the various modules) */\n getBindings(): Record<string, Texture | Sampler> {\n const bindings = {} as Record<string, Texture | Sampler>;\n for (const moduleBindings of Object.values(this.moduleBindings)) {\n Object.assign(bindings, moduleBindings);\n }\n return bindings;\n }\n}\n"],"mappings":"AAEA,SAAQA,GAAG,QAAO,eAAe;AAEjC,SAAQC,eAAe,QAA6B,sBAAsB;AAiC1E,OAAO,MAAMC,YAAY,CAIvB;EAkBAC,WAAWA,CAACC,OAAyE,EAAE;IAAA,KAbvFA,OAAO;IAAA,KAGPC,cAAc;IAAA,KAEdC,cAAc;IAAA,KAEdC,qBAAqB;IAQnB,MAAMC,UAAU,GAAEP,eAAe,CAACQ,MAAM,CAACC,MAAM,CAACN,OAAO,CAAC,CAAC;IACzDJ,GAAG,CAACA,GAAG,CAAC,CAAC,EAAE,oCAAoC,EAAEQ,UAAU,CAACG,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC,CAAC;IAG/E,IAAI,CAACT,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,cAAc,GAAG,CAAC,CAA6D;IACpF,IAAI,CAACC,cAAc,GAAG,CAAC,CAAkE;IAGzF,KAAK,MAAM,CAACO,IAAI,EAAEC,MAAM,CAAC,IAAIL,MAAM,CAACM,OAAO,CAACX,OAAO,CAAC,EAAE;MAAA,IAAAY,mBAAA;MACpD,MAAMC,UAAU,GAAGJ,IAA0B;MAG7C,IAAI,CAACR,cAAc,CAACY,UAAU,CAAC,GAAG,EAAAD,mBAAA,GAAAF,MAAM,CAACI,WAAW,cAAAF,mBAAA,uBAAlBA,mBAAA,CAAAG,IAAA,CAAAL,MAAM,EAAe,CAAC,CAAC,CAAC,KAAIA,MAAM,CAACM,eAAe,IAAI,CAAC,CAAC;MAC1F,IAAI,CAACd,cAAc,CAACW,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC;EACF;EAGAI,OAAOA,CAAA,EAAS,CAAC;EAKjBC,QAAQA,CAACC,KAAsE,EAAQ;IACrF,KAAK,MAAMV,IAAI,IAAIJ,MAAM,CAACe,IAAI,CAACD,KAAK,CAAC,EAAE;MAAA,IAAAE,oBAAA;MACrC,MAAMR,UAAU,GAAGJ,IAA0B;MAC7C,MAAMa,WAAW,GAAGH,KAAK,CAACN,UAAU,CAAC;MACrC,MAAMH,MAAM,GAAG,IAAI,CAACV,OAAO,CAACa,UAAU,CAAC;MAEvC,MAAMU,QAAQ,IAAAF,oBAAA,GAAGX,MAAM,CAACI,WAAW,cAAAO,oBAAA,uBAAlBA,oBAAA,CAAAN,IAAA,CAAAL,MAAM,EAAeY,WAAW,EAAE,IAAI,CAACrB,cAAc,CAACY,UAAU,CAAC,CAAC;MACnFW,OAAO,CAACC,KAAK,CAACF,QAAQ,CAAC;MACvB,IAAI,CAACtB,cAAc,CAACY,UAAU,CAAC,GAAGU,QAAQ,IAAID,WAAkB;MAGhEE,OAAO,CAAC5B,GAAG,CAAE,YAAW8B,MAAM,CAACb,UAAU,CAAE,EAAC,EAAEA,UAAU,EAAE,IAAI,CAACZ,cAAc,CAACY,UAAU,CAAC,CAAC;IAK5F;EACF;EAWAc,UAAUA,CAAA,EAA2B;IACnC,OAAOtB,MAAM,CAACC,MAAM,CAAC,IAAI,CAACN,OAAO,CAAC;EACpC;EAGA4B,gBAAgBA,CAAA,EAA6D;IAC3E,OAAO,IAAI,CAAC3B,cAAc;EAC5B;EAGA4B,WAAWA,CAAA,EAAsC;IAC/C,MAAMC,QAAQ,GAAG,CAAC,CAAsC;IACxD,KAAK,MAAM5B,cAAc,IAAIG,MAAM,CAACC,MAAM,CAAC,IAAI,CAACJ,cAAc,CAAC,EAAE;MAC/DG,MAAM,CAAC0B,MAAM,CAACD,QAAQ,EAAE5B,cAAc,CAAC;IACzC;IACA,OAAO4B,QAAQ;EACjB;AACF"}
|
|
@@ -1,87 +1,57 @@
|
|
|
1
|
-
import { Device, Buffer,
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { Device, Buffer, BufferRange, Framebuffer, TransformFeedback, PrimitiveTopology, RenderPassParameters, BufferLayout } from '@luma.gl/core';
|
|
2
|
+
import { ShaderModule } from '@luma.gl/shadertools';
|
|
3
|
+
import { Model } from '../model/model';
|
|
4
4
|
/** Properties for creating Transforms */
|
|
5
5
|
export type TransformProps = {
|
|
6
6
|
id?: string;
|
|
7
7
|
vs?: string;
|
|
8
|
-
|
|
8
|
+
fs?: string;
|
|
9
|
+
vertexCount?: number;
|
|
9
10
|
sourceBuffers?: Record<string, Buffer>;
|
|
10
|
-
feedbackBuffers?: Record<string,
|
|
11
|
-
buffer: Buffer;
|
|
12
|
-
byteOffset?: number;
|
|
13
|
-
}>;
|
|
11
|
+
feedbackBuffers?: Record<string, Buffer | BufferRange>;
|
|
14
12
|
varyings?: string[];
|
|
15
13
|
feedbackMap?: Record<string, string>;
|
|
16
|
-
modules?:
|
|
14
|
+
modules?: ShaderModule[];
|
|
17
15
|
attributes?: Record<string, any>;
|
|
16
|
+
bufferLayout?: BufferLayout[];
|
|
18
17
|
uniforms?: Record<string, any>;
|
|
19
18
|
defines?: Record<string, any>;
|
|
20
|
-
parameters?: GLParameters;
|
|
21
19
|
discard?: boolean;
|
|
22
|
-
|
|
23
|
-
inject?: Record<string, string>;
|
|
24
|
-
drawMode?: number;
|
|
25
|
-
framebuffer?: Framebuffer;
|
|
26
|
-
_sourceTextures?: Record<string, Texture>;
|
|
27
|
-
_targetTexture?: string | Texture;
|
|
28
|
-
_targetTextureVarying?: string;
|
|
29
|
-
_swapTexture?: string | null;
|
|
30
|
-
_fs?: string;
|
|
31
|
-
fs?: string;
|
|
20
|
+
topology?: PrimitiveTopology;
|
|
32
21
|
};
|
|
33
22
|
/** Options that can be provided when running a Transform */
|
|
34
23
|
export type TransformRunOptions = {
|
|
35
24
|
framebuffer?: Framebuffer;
|
|
36
|
-
|
|
25
|
+
/** @deprecated Use uniform buffers for portability. */
|
|
37
26
|
uniforms?: Record<string, any>;
|
|
38
|
-
parameters?:
|
|
27
|
+
parameters?: RenderPassParameters;
|
|
39
28
|
discard?: boolean;
|
|
40
29
|
};
|
|
41
30
|
/** Options that control drawing a Transform. Used by subclasses to return draw parameters */
|
|
42
|
-
export type TransformDrawOptions = {
|
|
43
|
-
attributes?: Record<string, any>;
|
|
44
|
-
framebuffer?: any;
|
|
45
|
-
uniforms?: object;
|
|
46
|
-
discard?: boolean;
|
|
47
|
-
parameters?: object;
|
|
48
|
-
transformFeedback?: any;
|
|
49
|
-
};
|
|
50
|
-
export type TransformBinding = {
|
|
51
|
-
sourceBuffers: Record<string, Buffer>;
|
|
52
|
-
sourceTextures: Record<string, Texture>;
|
|
53
|
-
feedbackBuffers?: Record<string, Buffer | {
|
|
54
|
-
buffer: Buffer;
|
|
55
|
-
}>;
|
|
56
|
-
transformFeedback?: TransformFeedback;
|
|
57
|
-
framebuffer?: Framebuffer;
|
|
58
|
-
targetTexture?: Texture;
|
|
59
|
-
};
|
|
60
31
|
/**
|
|
61
32
|
* Takes source and target buffers/textures and sets up the pipeline
|
|
62
33
|
*/
|
|
63
34
|
export declare class Transform {
|
|
64
|
-
/**
|
|
65
|
-
* Check if Transforms are supported (they are not under WebGL1)
|
|
66
|
-
* @todo differentiate writing to buffer vs not
|
|
67
|
-
*/
|
|
68
|
-
static isSupported(device: Device | WebGLRenderingContext): boolean;
|
|
69
35
|
readonly device: Device;
|
|
70
|
-
readonly
|
|
71
|
-
|
|
36
|
+
readonly model: Model;
|
|
37
|
+
readonly transformFeedback: TransformFeedback;
|
|
38
|
+
/** @deprecated Use device feature test. */
|
|
39
|
+
static isSupported(device: Device): boolean;
|
|
72
40
|
elementIDBuffer: Buffer | null;
|
|
73
|
-
constructor(device: Device
|
|
74
|
-
/**
|
|
41
|
+
constructor(device: Device, props?: TransformProps);
|
|
42
|
+
/** Destroy owned resources. */
|
|
75
43
|
destroy(): void;
|
|
76
|
-
/** @deprecated Use destroy*() */
|
|
77
|
-
delete(): void;
|
|
78
44
|
/** Run one transform loop. */
|
|
79
45
|
run(options?: TransformRunOptions): void;
|
|
80
46
|
/** swap resources if a map is provided */
|
|
81
47
|
swap(): void;
|
|
82
|
-
/**
|
|
83
|
-
getBuffer(varyingName: string): Buffer | null;
|
|
84
|
-
|
|
48
|
+
/** Returns the {@link Buffer} or {@link BufferRange} for given varying name. */
|
|
49
|
+
getBuffer(varyingName: string): Buffer | BufferRange | null;
|
|
50
|
+
readAsync(varyingName: string): Promise<Uint8Array>;
|
|
51
|
+
/**
|
|
52
|
+
* Return data either from Buffer or from Texture.
|
|
53
|
+
* @deprecated Prefer {@link readAsync}.
|
|
54
|
+
*/
|
|
85
55
|
getData(options?: {
|
|
86
56
|
packed?: boolean;
|
|
87
57
|
varyingName?: string;
|
|
@@ -91,8 +61,5 @@ export declare class Transform {
|
|
|
91
61
|
/** Update some or all buffer/texture bindings. */
|
|
92
62
|
update(props: TransformProps): void;
|
|
93
63
|
_updateModelProps(props: TransformProps): TransformProps;
|
|
94
|
-
_buildResourceTransforms(props: TransformProps): void;
|
|
95
|
-
_updateDrawOptions(options: TransformRunOptions): TransformDrawOptions;
|
|
96
64
|
}
|
|
97
|
-
export {};
|
|
98
65
|
//# sourceMappingURL=transform.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/transform/transform.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/transform/transform.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAU,iBAAiB,EAAE,oBAAoB,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACzJ,OAAO,EAAkC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAC;AAKrC,yCAAyC;AACzC,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC;IACvD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAE7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAO9B,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,6FAA6F;AAmB7F;;GAEG;AACH,qBAAa,SAAS;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAE9C,2CAA2C;IAC3C,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAM3C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAE1B,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,cAAmB;IAoCtD,+BAA+B;IAC/B,OAAO,IAAI,IAAI;IAYf,8BAA8B;IAC9B,GAAG,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI;IAgBxC,0CAA0C;IAC1C,IAAI,IAAI,IAAI;IAUZ,gFAAgF;IAChF,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI;IAI3D,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IASnD;;;OAGG;IACH,OAAO,CAAC,OAAO,GAAE;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAM;IAY9D,yDAAyD;IACzD,cAAc,IAAI,WAAW,GAAG,IAAI;IAKpC,kDAAkD;IAClD,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAanC,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc;CA+BzD"}
|
|
@@ -1,48 +1,90 @@
|
|
|
1
|
+
import { Buffer, assert } from '@luma.gl/core';
|
|
2
|
+
import { getShaderInfo, getPassthroughFS } from '@luma.gl/shadertools';
|
|
3
|
+
import { Model } from "../model/model.js";
|
|
1
4
|
export class Transform {
|
|
2
5
|
static isSupported(device) {
|
|
3
|
-
return
|
|
6
|
+
return device.features.has('transform-feedback-webgl2');
|
|
4
7
|
}
|
|
5
8
|
constructor(device) {
|
|
6
9
|
let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
7
10
|
this.device = void 0;
|
|
8
|
-
this.
|
|
9
|
-
this.
|
|
11
|
+
this.model = void 0;
|
|
12
|
+
this.transformFeedback = void 0;
|
|
10
13
|
this.elementIDBuffer = null;
|
|
14
|
+
assert(device.features.has('transform-feedback-webgl2'), 'Device must support transform feedback');
|
|
15
|
+
this.device = device;
|
|
16
|
+
this.model = new Model(this.device, {
|
|
17
|
+
vs: props.vs,
|
|
18
|
+
fs: props.fs || getPassthroughFS({
|
|
19
|
+
version: getShaderInfo(props.vs).version
|
|
20
|
+
}),
|
|
21
|
+
id: props.id || 'transform-model',
|
|
22
|
+
varyings: props.varyings,
|
|
23
|
+
attributes: props.attributes,
|
|
24
|
+
bufferLayout: props.bufferLayout,
|
|
25
|
+
topology: props.topology || 'point-list',
|
|
26
|
+
vertexCount: props.vertexCount,
|
|
27
|
+
defines: props.defines,
|
|
28
|
+
modules: props.modules
|
|
29
|
+
});
|
|
30
|
+
this.transformFeedback = this.device.createTransformFeedback({
|
|
31
|
+
layout: this.model.pipeline.shaderLayout,
|
|
32
|
+
buffers: props.feedbackBuffers
|
|
33
|
+
});
|
|
34
|
+
this.model.setTransformFeedback(this.transformFeedback);
|
|
35
|
+
Object.seal(this);
|
|
11
36
|
}
|
|
12
|
-
destroy() {
|
|
13
|
-
|
|
14
|
-
|
|
37
|
+
destroy() {
|
|
38
|
+
if (this.model) {
|
|
39
|
+
this.model.destroy();
|
|
40
|
+
}
|
|
15
41
|
}
|
|
16
42
|
run(options) {
|
|
17
43
|
const {
|
|
18
|
-
|
|
44
|
+
framebuffer,
|
|
45
|
+
parameters,
|
|
46
|
+
discard,
|
|
47
|
+
uniforms
|
|
19
48
|
} = options || {};
|
|
20
|
-
const
|
|
21
|
-
|
|
49
|
+
const renderPass = this.device.beginRenderPass({
|
|
50
|
+
framebuffer,
|
|
51
|
+
parameters,
|
|
52
|
+
discard
|
|
53
|
+
});
|
|
54
|
+
if (uniforms) this.model.setUniforms(uniforms);
|
|
55
|
+
this.model.draw(renderPass);
|
|
56
|
+
renderPass.end();
|
|
57
|
+
}
|
|
58
|
+
swap() {
|
|
59
|
+
throw new Error('Not implemented');
|
|
22
60
|
}
|
|
23
|
-
swap() {}
|
|
24
61
|
getBuffer(varyingName) {
|
|
25
|
-
return
|
|
62
|
+
return this.transformFeedback.getBuffer(varyingName);
|
|
63
|
+
}
|
|
64
|
+
readAsync(varyingName) {
|
|
65
|
+
const result = this.getBuffer(varyingName);
|
|
66
|
+
if (result instanceof Buffer) {
|
|
67
|
+
return result.readAsync();
|
|
68
|
+
}
|
|
69
|
+
const {
|
|
70
|
+
buffer,
|
|
71
|
+
byteOffset = 0,
|
|
72
|
+
byteLength = buffer.byteLength
|
|
73
|
+
} = result;
|
|
74
|
+
return buffer.readAsync(byteOffset, byteLength);
|
|
26
75
|
}
|
|
27
76
|
getData() {
|
|
28
77
|
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
78
|
+
throw new Error('Not implemented');
|
|
29
79
|
}
|
|
30
80
|
getFramebuffer() {
|
|
31
|
-
|
|
81
|
+
throw new Error('Not implemented');
|
|
82
|
+
}
|
|
83
|
+
update(props) {
|
|
84
|
+
throw new Error('Not implemented');
|
|
32
85
|
}
|
|
33
|
-
update(props) {}
|
|
34
86
|
_updateModelProps(props) {
|
|
35
|
-
|
|
36
|
-
...props
|
|
37
|
-
};
|
|
38
|
-
return updatedProps;
|
|
39
|
-
}
|
|
40
|
-
_buildResourceTransforms(props) {}
|
|
41
|
-
_updateDrawOptions(options) {
|
|
42
|
-
const updatedOpts = {
|
|
43
|
-
...options
|
|
44
|
-
};
|
|
45
|
-
return updatedOpts;
|
|
87
|
+
throw new Error('Not implemented');
|
|
46
88
|
}
|
|
47
89
|
}
|
|
48
90
|
//# sourceMappingURL=transform.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","names":["Transform","isSupported","device","constructor","props","arguments","length","undefined","gl","elementCount","elementIDBuffer","destroy","delete","run","options","clearRenderTarget","updatedOpts","_updateDrawOptions","framebuffer","swap","getBuffer","varyingName","getData","getFramebuffer","update","_updateModelProps","updatedProps","_buildResourceTransforms"],"sources":["../../src/transform/transform.ts"],"sourcesContent":["\n// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {Device, Buffer, Texture, Framebuffer} from '@luma.gl/core';\nimport {GLParameters} from '@luma.gl/constants';\n// import {getShaderInfo, getPassthroughFS} from '@luma.gl/shadertools';\n// import {GL} from '@luma.gl/constants';\n// import {Model} from '../model/model';\n\n// import {AccessorObject} from '@luma.gl/webgl';\n// import {default as TransformFeedback} from '../classic/transform-feedback';\n// import BufferTransform from './buffer-transform';\n// import TextureTransform from './texture-transform';\n\ntype TransformFeedback = any;\n\n/** Properties for creating Transforms */\nexport type TransformProps = {\n id?: string;\n vs?: string;\n elementCount?: number;\n sourceBuffers?: Record<string, Buffer>;\n feedbackBuffers?: Record<string, string | Buffer | {buffer: Buffer; byteOffset?: number}>;\n varyings?: string[];\n feedbackMap?: Record<string, string>;\n modules?: object[]; // TODO use ShaderModule type\n attributes?: Record<string, any>;\n uniforms?: Record<string, any>;\n defines?: Record<string, any>\n parameters?: GLParameters;\n discard?: boolean;\n isIndexed?: boolean;\n inject?: Record<string, string>;\n drawMode?: number;\n framebuffer?: Framebuffer;\n _sourceTextures?: Record<string, Texture>;\n _targetTexture?: string | Texture;\n _targetTextureVarying?: string;\n _swapTexture?: string | null;\n _fs?: string;\n fs?: string;\n};\n\n/** Options that can be provided when running a Transform */\nexport type TransformRunOptions = {\n framebuffer?: Framebuffer;\n clearRenderTarget?: boolean;\n uniforms?: Record<string, any>;\n parameters?: Record<string, any>;\n discard?: boolean;\n};\n\n/** Options that control drawing a Transform. Used by subclasses to return draw parameters */\nexport type TransformDrawOptions = {\n attributes?: Record<string, any>;\n framebuffer?: any;\n uniforms?: object;\n discard?: boolean;\n parameters?: object;\n transformFeedback?: any;\n};\n\nexport type TransformBinding = {\n sourceBuffers: Record<string, Buffer>;\n sourceTextures: Record<string, Texture>;\n feedbackBuffers?: Record<string, Buffer | {buffer: Buffer}>;\n transformFeedback?: TransformFeedback;\n framebuffer?: Framebuffer;\n targetTexture?: Texture;\n};\n\n/**\n * Takes source and target buffers/textures and sets up the pipeline\n */\nexport class Transform {\n /**\n * Check if Transforms are supported (they are not under WebGL1)\n * @todo differentiate writing to buffer vs not\n */\n static isSupported(device: Device | WebGLRenderingContext): boolean {\n // try {\n // const webglDevice = WebGLDevice.attach(device);\n // return webglDevice.isWebGL2;\n // } catch {\n // return false;\n // }\n return false;\n }\n\n readonly device: Device;\n readonly gl: WebGL2RenderingContext;\n // model: Model;\n elementCount = 0;\n // bufferTransform: BufferTransform | null = null;\n // textureTransform: TextureTransform | null = null;\n elementIDBuffer: Buffer | null = null;\n\n constructor(device: Device | WebGLRenderingContext, props: TransformProps = {}) {\n /*\n this.device = WebGLDevice.attach(device);\n // TODO assert webgl2?\n this.gl = this.device.gl2;\n this._buildResourceTransforms(props);\n\n props = this._updateModelProps(props);\n // @ts-expect-error TODO this is valid type error for params\n this.model = new Model(this.device, {\n ...props,\n fs: props.fs || getPassthroughFS({version: getShaderInfo(props.vs).version}),\n id: props.id || 'transform-model',\n drawMode: props.drawMode || GL.POINTS,\n vertexCount: props.elementCount\n });\n\n // if (this.bufferTransform) {\n // this.bufferTransform.setupResources({model: this.model});\n // }\n Object.seal(this);\n */\n }\n\n /** Delete owned resources. */\n destroy(): void {\n // if (this.model) {\n // this.model.destroy();\n // }\n // if (this.bufferTransform) {\n // this.bufferTransform.destroy();\n // }\n // if (this.textureTransform) {\n // this.textureTransform.destroy();\n // }\n }\n\n /** @deprecated Use destroy*() */\n delete(): void {\n this.destroy();\n }\n\n /** Run one transform loop. */\n run(options?: TransformRunOptions): void {\n const {clearRenderTarget = true} = options || {};\n\n const updatedOpts = this._updateDrawOptions(options);\n\n if (clearRenderTarget && updatedOpts.framebuffer) {\n // clear(this.device, {framebuffer: updatedOpts.framebuffer, color: true});\n }\n\n // this.model.transform(updatedOpts);\n }\n\n /** swap resources if a map is provided */\n swap(): void {\n // let swapped = false;\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n // for (const resourceTransform of resourceTransforms) {\n // swapped = swapped || Boolean(resourceTransform?.swap());\n // }\n // assert(swapped, 'Nothing to swap');\n }\n\n /** Return Buffer object for given varying name. */\n getBuffer(varyingName: string): Buffer | null {\n // return this.bufferTransform && this.bufferTransform.getBuffer(varyingName);\n return null;\n }\n\n /** Return data either from Buffer or from Texture */\n getData(options: {packed?: boolean; varyingName?: string} = {}) {\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n // for (const resourceTransform of resourceTransforms) {\n // const data = resourceTransform?.getData(options);\n // if (data) {\n // return data;\n // }\n // }\n // return null;\n }\n\n /** Return framebuffer object if rendering to textures */\n getFramebuffer(): Framebuffer | null {\n // return this.textureTransform?.getFramebuffer() || null;\n return null;\n }\n\n /** Update some or all buffer/texture bindings. */\n update(props: TransformProps): void {\n // if (props.elementCount !== undefined) {\n // this.model.setVertexCount(props.elementCount);\n // }\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n // for (const resourceTransform of resourceTransforms) {\n // resourceTransform?.update(props);\n // }\n }\n\n // Private\n\n _updateModelProps(props: TransformProps): TransformProps {\n const updatedProps: TransformProps = {...props};\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean) ;\n // for (const resourceTransform of resourceTransforms) {\n // updatedProps = resourceTransform.updateModelProps(updatedProps);\n // }\n return updatedProps;\n }\n\n _buildResourceTransforms(props: TransformProps) {\n // if (canCreateBufferTransform(props)) {\n // this.bufferTransform = new BufferTransform(this.device, props);\n // }\n // if (canCreateTextureTransform(props)) {\n // this.textureTransform = new TextureTransform(this.device, props);\n // }\n // assert(\n // this.bufferTransform || this.textureTransform,\n // 'must provide source/feedback buffers or source/target textures'\n // );\n }\n\n _updateDrawOptions(options: TransformRunOptions): TransformDrawOptions {\n const updatedOpts = {...options};\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean) ;\n // for (const resourceTransform of resourceTransforms) {\n // updatedOpts = Object.assign(updatedOpts, resourceTransform.getDrawOptions(updatedOpts));\n // }\n return updatedOpts;\n }\n}\n\n// Helper Methods\n\n// function canCreateBufferTransform(props: TransformProps): boolean {\n// const canCreate =\n// (props.feedbackBuffers && !isObjectEmpty(props.feedbackBuffers)) ||\n// (props.feedbackMap && !isObjectEmpty(props.feedbackMap)) ||\n// (props.varyings && props.varyings.length > 0);\n// return Boolean(canCreate);\n// }\n\n// function canCreateTextureTransform(props: TransformProps): boolean {\n// const canCreate =\n// (props._sourceTextures && !isObjectEmpty(props._sourceTextures)) ||\n// props._targetTexture ||\n// props._targetTextureVarying;\n// return Boolean(canCreate);\n// }\n"],"mappings":"AA2EA,OAAO,MAAMA,SAAS,CAAC;EAKrB,OAAOC,WAAWA,CAACC,MAAsC,EAAW;IAOlE,OAAO,KAAK;EACd;EAUAC,WAAWA,CAACD,MAAsC,EAA8B;IAAA,IAA5BE,KAAqB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAAA,KARrEH,MAAM;IAAA,KACNM,EAAE;IAAA,KAEXC,YAAY,GAAG,CAAC;IAAA,KAGhBC,eAAe,GAAkB,IAAI;EAwBrC;EAGAC,OAAOA,CAAA,EAAS,CAUhB;EAGAC,MAAMA,CAAA,EAAS;IACb,IAAI,CAACD,OAAO,CAAC,CAAC;EAChB;EAGAE,GAAGA,CAACC,OAA6B,EAAQ;IACvC,MAAM;MAACC,iBAAiB,GAAG;IAAI,CAAC,GAAGD,OAAO,IAAI,CAAC,CAAC;IAEhD,MAAME,WAAW,GAAG,IAAI,CAACC,kBAAkB,CAACH,OAAO,CAAC;IAEpD,IAAIC,iBAAiB,IAAIC,WAAW,CAACE,WAAW,EAAE,CAElD;EAGF;EAGAC,IAAIA,CAAA,EAAS,CAOb;EAGAC,SAASA,CAACC,WAAmB,EAAiB;IAE5C,OAAO,IAAI;EACb;EAGAC,OAAOA,CAAA,EAAyD;IAAA,IAAxDR,OAAiD,GAAAT,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAS9D;EAGAkB,cAAcA,CAAA,EAAuB;IAEnC,OAAO,IAAI;EACb;EAGAC,MAAMA,CAACpB,KAAqB,EAAQ,CAQpC;EAIAqB,iBAAiBA,CAACrB,KAAqB,EAAkB;IACvD,MAAMsB,YAA4B,GAAG;MAAC,GAAGtB;IAAK,CAAC;IAK/C,OAAOsB,YAAY;EACrB;EAEAC,wBAAwBA,CAACvB,KAAqB,EAAE,CAWhD;EAEAa,kBAAkBA,CAACH,OAA4B,EAAwB;IACrE,MAAME,WAAW,GAAG;MAAC,GAAGF;IAAO,CAAC;IAKhC,OAAOE,WAAW;EACpB;AACF"}
|
|
1
|
+
{"version":3,"file":"transform.js","names":["Buffer","assert","getShaderInfo","getPassthroughFS","Model","Transform","isSupported","device","features","has","constructor","props","arguments","length","undefined","model","transformFeedback","elementIDBuffer","vs","fs","version","id","varyings","attributes","bufferLayout","topology","vertexCount","defines","modules","createTransformFeedback","layout","pipeline","shaderLayout","buffers","feedbackBuffers","setTransformFeedback","Object","seal","destroy","run","options","framebuffer","parameters","discard","uniforms","renderPass","beginRenderPass","setUniforms","draw","end","swap","Error","getBuffer","varyingName","readAsync","result","buffer","byteOffset","byteLength","getData","getFramebuffer","update","_updateModelProps"],"sources":["../../src/transform/transform.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {Device, Buffer, BufferRange, Framebuffer, TransformFeedback, assert, PrimitiveTopology, RenderPassParameters, BufferLayout} from '@luma.gl/core';\nimport {getShaderInfo, getPassthroughFS, ShaderModule} from '@luma.gl/shadertools';\nimport {Model} from '../model/model';\n\n// import BufferTransform from './buffer-transform';\n// import TextureTransform from './texture-transform';\n\n/** Properties for creating Transforms */\nexport type TransformProps = {\n id?: string;\n vs?: string;\n fs?: string;\n vertexCount?: number;\n sourceBuffers?: Record<string, Buffer>;\n feedbackBuffers?: Record<string, Buffer | BufferRange>;\n varyings?: string[];\n feedbackMap?: Record<string, string>;\n modules?: ShaderModule[];\n attributes?: Record<string, any>;\n bufferLayout?: BufferLayout[];\n uniforms?: Record<string, any>;\n defines?: Record<string, any>\n // parameters?: GLParameters;\n discard?: boolean;\n // isIndexed?: boolean;\n // inject?: Record<string, string>;\n topology?: PrimitiveTopology;\n // framebuffer?: Framebuffer;\n // _sourceTextures?: Record<string, Texture>;\n // _targetTexture?: string | Texture;\n // _targetTextureVarying?: string;\n // _swapTexture?: string | null;\n // _fs?: string;\n};\n\n/** Options that can be provided when running a Transform */\nexport type TransformRunOptions = {\n framebuffer?: Framebuffer;\n // clearRenderTarget?: boolean;\n /** @deprecated Use uniform buffers for portability. */\n uniforms?: Record<string, any>;\n parameters?: RenderPassParameters;\n discard?: boolean;\n};\n\n/** Options that control drawing a Transform. Used by subclasses to return draw parameters */\n// export type TransformDrawOptions = {\n// attributes?: Record<string, any>;\n// framebuffer?: any;\n// uniforms?: object;\n// discard?: boolean;\n// parameters?: object;\n// transformFeedback?: TransformFeedback;\n// };\n\n// export type TransformBinding = {\n// sourceBuffers: Record<string, Buffer>;\n// sourceTextures: Record<string, Texture>;\n// feedbackBuffers?: Record<string, Buffer | BufferRange>;\n// transformFeedback?: TransformFeedback;\n// framebuffer?: Framebuffer;\n// targetTexture?: Texture;\n// };\n\n/**\n * Takes source and target buffers/textures and sets up the pipeline\n */\nexport class Transform {\n readonly device: Device;\n readonly model: Model;\n readonly transformFeedback: TransformFeedback;\n\n /** @deprecated Use device feature test. */\n static isSupported(device: Device): boolean {\n return device.features.has('transform-feedback-webgl2');\n }\n\n // bufferTransform: BufferTransform | null = null;\n // textureTransform: TextureTransform | null = null;\n elementIDBuffer: Buffer | null = null;\n\n constructor(device: Device, props: TransformProps = {}) {\n assert(device.features.has('transform-feedback-webgl2'), 'Device must support transform feedback');\n\n this.device = device;\n\n // this._buildResourceTransforms(props);\n\n // props = this._updateModelProps(props);\n\n this.model = new Model(this.device, {\n vs: props.vs,\n fs: props.fs || getPassthroughFS({version: getShaderInfo(props.vs).version}),\n id: props.id || 'transform-model',\n varyings: props.varyings,\n attributes: props.attributes,\n bufferLayout: props.bufferLayout,\n topology: props.topology || 'point-list',\n vertexCount: props.vertexCount,\n defines: props.defines,\n modules: props.modules,\n });\n\n this.transformFeedback = this.device.createTransformFeedback({\n layout: this.model.pipeline.shaderLayout,\n buffers: props.feedbackBuffers,\n });\n\n this.model.setTransformFeedback(this.transformFeedback);\n\n // if (this.bufferTransform) {\n // this.bufferTransform.setupResources({model: this.model});\n // }\n\n Object.seal(this);\n }\n\n /** Destroy owned resources. */\n destroy(): void {\n if (this.model) {\n this.model.destroy();\n }\n // if (this.bufferTransform) {\n // this.bufferTransform.destroy();\n // }\n // if (this.textureTransform) {\n // this.textureTransform.destroy();\n // }\n }\n\n /** Run one transform loop. */\n run(options?: TransformRunOptions): void {\n const {framebuffer, parameters, discard, uniforms} = options || {};\n // const {clearRenderTarget = true} = options || {};\n\n // const updatedOpts = this._updateDrawOptions(options);\n\n // if (clearRenderTarget && updatedOpts.framebuffer) {\n // clear(this.device, {framebuffer: updatedOpts.framebuffer, color: true});\n // }\n\n const renderPass = this.device.beginRenderPass({framebuffer, parameters, discard});\n if (uniforms) this.model.setUniforms(uniforms);\n this.model.draw(renderPass);\n renderPass.end();\n }\n\n /** swap resources if a map is provided */\n swap(): void {\n // let swapped = false;\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n // for (const resourceTransform of resourceTransforms) {\n // swapped = swapped || Boolean(resourceTransform?.swap());\n // }\n // assert(swapped, 'Nothing to swap');\n throw new Error('Not implemented');\n }\n\n /** Returns the {@link Buffer} or {@link BufferRange} for given varying name. */\n getBuffer(varyingName: string): Buffer | BufferRange | null {\n return this.transformFeedback.getBuffer(varyingName);\n }\n\n readAsync(varyingName: string): Promise<Uint8Array> {\n const result = this.getBuffer(varyingName);\n if (result instanceof Buffer) {\n return result.readAsync();\n }\n const {buffer, byteOffset = 0, byteLength = buffer.byteLength} = result;\n return buffer.readAsync(byteOffset, byteLength);\n }\n\n /**\n * Return data either from Buffer or from Texture.\n * @deprecated Prefer {@link readAsync}.\n */\n getData(options: {packed?: boolean; varyingName?: string} = {}) {\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n // for (const resourceTransform of resourceTransforms) {\n // const data = resourceTransform?.getData(options);\n // if (data) {\n // return data;\n // }\n // }\n // return null;\n throw new Error('Not implemented');\n }\n\n /** Return framebuffer object if rendering to textures */\n getFramebuffer(): Framebuffer | null {\n // return this.textureTransform?.getFramebuffer() || null;\n throw new Error('Not implemented');\n }\n\n /** Update some or all buffer/texture bindings. */\n update(props: TransformProps): void {\n // if (props.elementCount !== undefined) {\n // this.model.setVertexCount(props.elementCount);\n // }\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n // for (const resourceTransform of resourceTransforms) {\n // resourceTransform?.update(props);\n // }\n throw new Error('Not implemented');\n }\n\n // Private\n\n _updateModelProps(props: TransformProps): TransformProps {\n // const updatedProps: TransformProps = {...props};\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean) ;\n // for (const resourceTransform of resourceTransforms) {\n // updatedProps = resourceTransform.updateModelProps(updatedProps);\n // }\n // return updatedProps;\n throw new Error('Not implemented');\n }\n\n // _buildResourceTransforms(props: TransformProps) {\n // if (canCreateBufferTransform(props)) {\n // this.bufferTransform = new BufferTransform(this.device, props);\n // }\n // if (canCreateTextureTransform(props)) {\n // this.textureTransform = new TextureTransform(this.device, props);\n // }\n // assert(\n // this.bufferTransform || this.textureTransform,\n // 'must provide source/feedback buffers or source/target textures'\n // );\n // }\n\n // _updateDrawOptions(options: TransformRunOptions): TransformDrawOptions {\n // const updatedOpts = {...options};\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean) ;\n // for (const resourceTransform of resourceTransforms) {\n // updatedOpts = Object.assign(updatedOpts, resourceTransform.getDrawOptions(updatedOpts));\n // }\n // return updatedOpts;\n // }\n}\n\n// Helper Methods\n\n// function canCreateBufferTransform(props: TransformProps): boolean {\n// const canCreate =\n// (props.feedbackBuffers && !isObjectEmpty(props.feedbackBuffers)) ||\n// (props.feedbackMap && !isObjectEmpty(props.feedbackMap)) ||\n// (props.varyings && props.varyings.length > 0);\n// return Boolean(canCreate);\n// }\n\n// function canCreateTextureTransform(props: TransformProps): boolean {\n// const canCreate =\n// (props._sourceTextures && !isObjectEmpty(props._sourceTextures)) ||\n// props._targetTexture ||\n// props._targetTextureVarying;\n// return Boolean(canCreate);\n// }\n"],"mappings":"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"}
|