@luma.gl/engine 8.6.0-alpha.4 → 9.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/animation/key-frames.d.ts +1 -0
  2. package/dist/animation/key-frames.d.ts.map +1 -1
  3. package/dist/animation/key-frames.js.map +1 -1
  4. package/dist/animation/timeline.d.ts +1 -1
  5. package/dist/animation/timeline.d.ts.map +1 -1
  6. package/dist/animation/timeline.js.map +1 -1
  7. package/dist/geometries/cone-geometry.d.ts.map +1 -1
  8. package/dist/geometries/cone-geometry.js +1 -1
  9. package/dist/geometries/cone-geometry.js.map +1 -1
  10. package/dist/geometries/cube-geometry.d.ts +4 -0
  11. package/dist/geometries/cube-geometry.d.ts.map +1 -1
  12. package/dist/geometries/cube-geometry.js +30 -7
  13. package/dist/geometries/cube-geometry.js.map +1 -1
  14. package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
  15. package/dist/geometries/cylinder-geometry.js +1 -1
  16. package/dist/geometries/cylinder-geometry.js.map +1 -1
  17. package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -1
  18. package/dist/geometries/ico-sphere-geometry.js +1 -1
  19. package/dist/geometries/ico-sphere-geometry.js.map +1 -1
  20. package/dist/geometries/plane-geometry.d.ts.map +1 -1
  21. package/dist/geometries/plane-geometry.js +1 -1
  22. package/dist/geometries/plane-geometry.js.map +1 -1
  23. package/dist/geometries/sphere-geometry.d.ts.map +1 -1
  24. package/dist/geometries/sphere-geometry.js +1 -1
  25. package/dist/geometries/sphere-geometry.js.map +1 -1
  26. package/dist/geometries/truncated-cone-geometry.d.ts +15 -3
  27. package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
  28. package/dist/geometries/truncated-cone-geometry.js +29 -15
  29. package/dist/geometries/truncated-cone-geometry.js.map +1 -1
  30. package/dist/geometry/geometry-table.d.ts +15 -0
  31. package/dist/geometry/geometry-table.d.ts.map +1 -0
  32. package/dist/geometry/geometry-table.js +2 -0
  33. package/dist/{transform/transform-types.js.map → geometry/geometry-table.js.map} +1 -1
  34. package/dist/geometry/geometry-utils.js.map +1 -1
  35. package/dist/geometry/geometry.d.ts +34 -7
  36. package/dist/geometry/geometry.d.ts.map +1 -1
  37. package/dist/geometry/geometry.js +33 -11
  38. package/dist/geometry/geometry.js.map +1 -1
  39. package/dist/geometry/primitive-utils.d.ts +1 -0
  40. package/dist/geometry/primitive-utils.d.ts.map +1 -0
  41. package/dist/geometry/primitive-utils.js +2 -0
  42. package/dist/geometry/primitive-utils.js.map +1 -0
  43. package/dist/index.d.ts +3 -5
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +1 -4
  46. package/dist/index.js.map +1 -1
  47. package/dist/lib/animation-loop.d.ts +14 -73
  48. package/dist/lib/animation-loop.d.ts.map +1 -1
  49. package/dist/lib/animation-loop.js +39 -160
  50. package/dist/lib/animation-loop.js.map +1 -1
  51. package/dist/lib/animation-props.d.ts +24 -0
  52. package/dist/lib/animation-props.d.ts.map +1 -0
  53. package/dist/lib/animation-props.js +2 -0
  54. package/dist/lib/animation-props.js.map +1 -0
  55. package/dist/lib/clip-space.d.ts +1 -0
  56. package/dist/lib/clip-space.d.ts.map +1 -0
  57. package/dist/lib/clip-space.js +2 -0
  58. package/dist/lib/clip-space.js.map +1 -0
  59. package/dist/lib/model-utils.d.ts +4 -3
  60. package/dist/lib/model-utils.d.ts.map +1 -1
  61. package/dist/lib/model-utils.js +24 -70
  62. package/dist/lib/model-utils.js.map +1 -1
  63. package/dist/lib/model.d.ts +34 -104
  64. package/dist/lib/model.d.ts.map +1 -1
  65. package/dist/lib/model.js +108 -505
  66. package/dist/lib/model.js.map +1 -1
  67. package/dist/lib/pipeline-factory.d.ts +55 -0
  68. package/dist/lib/pipeline-factory.d.ts.map +1 -0
  69. package/dist/lib/pipeline-factory.js +191 -0
  70. package/dist/lib/pipeline-factory.js.map +1 -0
  71. package/dist/lib/render-loop.d.ts +4 -17
  72. package/dist/lib/render-loop.d.ts.map +1 -1
  73. package/dist/lib/render-loop.js +14 -21
  74. package/dist/lib/render-loop.js.map +1 -1
  75. package/package.json +5 -5
  76. package/src/animation/key-frames.ts +1 -0
  77. package/src/animation/timeline.ts +1 -1
  78. package/src/geometries/cone-geometry.ts +1 -1
  79. package/src/geometries/cube-geometry.ts +159 -8
  80. package/src/geometries/cylinder-geometry.ts +1 -1
  81. package/src/geometries/ico-sphere-geometry.ts +1 -1
  82. package/src/geometries/plane-geometry.ts +1 -1
  83. package/src/geometries/sphere-geometry.ts +2 -2
  84. package/src/geometries/truncated-cone-geometry.ts +30 -12
  85. package/src/geometry/geometry-table.ts +16 -0
  86. package/src/geometry/geometry-utils.ts +1 -1
  87. package/src/geometry/geometry.ts +58 -13
  88. package/src/geometry/primitive-utils.ts +30 -0
  89. package/src/index.ts +7 -8
  90. package/src/lib/animation-loop.ts +85 -274
  91. package/src/lib/animation-props.ts +31 -0
  92. package/src/{utils → lib}/clip-space.ts +5 -2
  93. package/src/lib/model-utils.ts +60 -32
  94. package/src/lib/model.ts +126 -642
  95. package/src/lib/pipeline-factory.ts +225 -0
  96. package/src/lib/render-loop.ts +21 -19
  97. package/dist/lib/program-manager.d.ts +0 -39
  98. package/dist/lib/program-manager.d.ts.map +0 -1
  99. package/dist/lib/program-manager.js +0 -175
  100. package/dist/lib/program-manager.js.map +0 -1
  101. package/dist/transform/buffer-transform.d.ts +0 -36
  102. package/dist/transform/buffer-transform.d.ts.map +0 -1
  103. package/dist/transform/buffer-transform.js +0 -255
  104. package/dist/transform/buffer-transform.js.map +0 -1
  105. package/dist/transform/texture-transform.d.ts +0 -57
  106. package/dist/transform/texture-transform.d.ts.map +0 -1
  107. package/dist/transform/texture-transform.js +0 -412
  108. package/dist/transform/texture-transform.js.map +0 -1
  109. package/dist/transform/transform-shader-utils.d.ts +0 -26
  110. package/dist/transform/transform-shader-utils.d.ts.map +0 -1
  111. package/dist/transform/transform-shader-utils.js +0 -149
  112. package/dist/transform/transform-shader-utils.js.map +0 -1
  113. package/dist/transform/transform-types.d.ts +0 -44
  114. package/dist/transform/transform-types.d.ts.map +0 -1
  115. package/dist/transform/transform-types.js +0 -2
  116. package/dist/transform/transform.d.ts +0 -47
  117. package/dist/transform/transform.d.ts.map +0 -1
  118. package/dist/transform/transform.js +0 -198
  119. package/dist/transform/transform.js.map +0 -1
  120. package/dist/utils/clip-space.d.ts +0 -5
  121. package/dist/utils/clip-space.d.ts.map +0 -1
  122. package/dist/utils/clip-space.js +0 -34
  123. package/dist/utils/clip-space.js.map +0 -1
  124. package/src/lib/program-manager.ts +0 -187
  125. package/src/transform/buffer-transform.ts +0 -214
  126. package/src/transform/texture-transform.ts +0 -344
  127. package/src/transform/transform-shader-utils.ts +0 -169
  128. package/src/transform/transform-types.ts +0 -42
  129. package/src/transform/transform.ts +0 -189
@@ -1,44 +0,0 @@
1
- /** Properties for creating Transforms */
2
- export declare type TransformProps = {
3
- id?: string;
4
- vs?: string;
5
- elementCount?: number;
6
- sourceBuffers?: object;
7
- feedbackBuffers?: object;
8
- varyings?: string[];
9
- feedbackMap?: object;
10
- modules?: object[];
11
- attributes?: any;
12
- uniforms?: any;
13
- parameters?: any;
14
- discard?: boolean;
15
- isIndexed?: boolean;
16
- _sourceTextures?: any;
17
- _targetTexture?: any;
18
- _targetTextureVarying?: string;
19
- _swapTexture?: string;
20
- _fs?: string;
21
- fs?: string;
22
- inject?: any;
23
- drawMode?: number;
24
- };
25
- /** Options that can be provided when running a Transform */
26
- export declare type TransformRunOptions = {
27
- clearRenderTarget?: boolean;
28
- uniforms: Record<string, any>;
29
- };
30
- /** Options that control drawing a Transform. Used by subclasses to return draw parameters */
31
- export declare type TransformDrawOptions = {
32
- attributes?: object;
33
- framebuffer?: any;
34
- uniforms?: object;
35
- discard?: boolean;
36
- parameters?: object;
37
- transformFeedback?: any;
38
- };
39
- export declare type TransformBinding = {
40
- sourceBuffers: any;
41
- feedbackBuffers: any;
42
- transformFeedback: any;
43
- };
44
- //# sourceMappingURL=transform-types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transform-types.d.ts","sourceRoot":"","sources":["../../src/transform/transform-types.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oBAAY,cAAc,GAAG;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,4DAA4D;AAC5D,oBAAY,mBAAmB,GAAG;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B,CAAC;AAEF,6FAA6F;AAC7F,oBAAY,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACzB,CAAC;AAEF,oBAAY,gBAAgB,GAAG;IAAC,aAAa,MAAC;IAAC,eAAe,MAAC;IAAC,iBAAiB,MAAA;CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=transform-types.js.map
@@ -1,47 +0,0 @@
1
- import { Device } from '@luma.gl/api';
2
- import type { Framebuffer, Buffer } from '@luma.gl/webgl';
3
- import { WebGLDevice } from '@luma.gl/webgl';
4
- import Model from '../lib/model';
5
- import { TransformProps, TransformRunOptions, TransformDrawOptions } from './transform-types';
6
- /**
7
- * Takes source and target buffers/textures and sets up the pipeline
8
- */
9
- export default class Transform {
10
- /**
11
- * Check if Transforms are supported (they are not under WebGL1)
12
- * @todo differentiate writing to buffer vs not
13
- */
14
- static isSupported(device: Device | WebGL2RenderingContext): boolean;
15
- readonly device: WebGLDevice;
16
- readonly gl: WebGL2RenderingContext;
17
- model: Model | null;
18
- elementCount: number;
19
- bufferTransform: any;
20
- textureTransform: any;
21
- elementIDBuffer: any;
22
- constructor(device: Device | WebGL2RenderingContext, props?: TransformProps);
23
- /** Delete owned resources. */
24
- destroy(): void;
25
- /** @deprecated Use destroy*() */
26
- delete(): void;
27
- /** Run one transform loop. */
28
- run(options?: TransformRunOptions): void;
29
- /** swap resources if a map is provided */
30
- swap(): void;
31
- /** Return Buffer object for given varying name. */
32
- getBuffer(varyingName?: string): Buffer;
33
- /** Return data either from Buffer or from Texture */
34
- getData(options?: {
35
- packed?: boolean;
36
- varyingName?: string;
37
- }): any;
38
- /** Return framebuffer object if rendering to textures */
39
- getFramebuffer(): Framebuffer | null;
40
- /** Update some or all buffer/texture bindings. */
41
- update(props: TransformProps): void;
42
- _initialize(props: TransformProps): void;
43
- _updateModelProps(props: TransformProps): TransformProps;
44
- _buildResourceTransforms(gl: WebGL2RenderingContext, props: TransformProps): void;
45
- _updateDrawOptions(options: TransformRunOptions): TransformDrawOptions;
46
- }
47
- //# sourceMappingURL=transform.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/transform/transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAS,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAC,WAAW,EAAE,MAAM,EAAC,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAC,WAAW,EAAgB,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,MAAM,cAAc,CAAC;AAGjC,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAE5F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GAAG,OAAO;IASpE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAQ;IAC3B,YAAY,SAAK;IACjB,eAAe,MAAQ;IACvB,gBAAgB,MAAQ;IACxB,eAAe,MAAQ;gBAEX,MAAM,EAAE,MAAM,GAAG,sBAAsB,EAAE,KAAK,GAAE,cAAmB;IAQ/E,8BAA8B;IAC9B,OAAO,IAAI,IAAI;IAaf,iCAAiC;IACjC,MAAM,IAAI,IAAI;IAId,8BAA8B;IAC9B,GAAG,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI;IAYxC,0CAA0C;IAC1C,IAAI,IAAI,IAAI;IASZ,mDAAmD;IACnD,SAAS,CAAC,WAAW,GAAE,MAAa,GAAG,MAAM;IAI7C,qDAAqD;IACrD,OAAO,CAAC,OAAO,GAAE;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAM;IAW9D,yDAAyD;IACzD,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC,kDAAkD;IAClD,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAYnC,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAoBxC,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc;IASxD,wBAAwB,CAAC,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,cAAc;IAa1E,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,oBAAoB;CAQvE"}
@@ -1,198 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { assert } from '@luma.gl/api';
3
- import GL from '@luma.gl/constants';
4
- import { getShaderInfo, getPassthroughFS } from '@luma.gl/shadertools';
5
- import { WebGLDevice, isObjectEmpty } from '@luma.gl/webgl';
6
- import Model from '../lib/model';
7
- import BufferTransform from './buffer-transform';
8
- import TextureTransform from './texture-transform';
9
- export default class Transform {
10
- static isSupported(device) {
11
- try {
12
- const webglDevice = WebGLDevice.attach(device);
13
- return webglDevice.isWebGL2;
14
- } catch {
15
- return false;
16
- }
17
- }
18
-
19
- constructor(device, props = {}) {
20
- _defineProperty(this, "device", void 0);
21
-
22
- _defineProperty(this, "gl", void 0);
23
-
24
- _defineProperty(this, "model", null);
25
-
26
- _defineProperty(this, "elementCount", 0);
27
-
28
- _defineProperty(this, "bufferTransform", null);
29
-
30
- _defineProperty(this, "textureTransform", null);
31
-
32
- _defineProperty(this, "elementIDBuffer", null);
33
-
34
- this.device = WebGLDevice.attach(device);
35
- this.gl = this.device.gl2;
36
-
37
- this._initialize(props);
38
-
39
- Object.seal(this);
40
- }
41
-
42
- destroy() {
43
- const {
44
- model,
45
- bufferTransform,
46
- textureTransform
47
- } = this;
48
-
49
- if (model) {
50
- model.delete();
51
- }
52
-
53
- if (bufferTransform) {
54
- bufferTransform.delete();
55
- }
56
-
57
- if (textureTransform) {
58
- textureTransform.delete();
59
- }
60
- }
61
-
62
- delete() {
63
- this.destroy();
64
- }
65
-
66
- run(options) {
67
- const {
68
- clearRenderTarget = true
69
- } = options || {};
70
-
71
- const updatedOpts = this._updateDrawOptions(options);
72
-
73
- if (clearRenderTarget && updatedOpts.framebuffer) {
74
- updatedOpts.framebuffer.clear({
75
- color: true
76
- });
77
- }
78
-
79
- this.model.transform(updatedOpts);
80
- }
81
-
82
- swap() {
83
- let swapped = false;
84
- const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
85
-
86
- for (const resourceTransform of resourceTransforms) {
87
- swapped = swapped || resourceTransform.swap();
88
- }
89
-
90
- assert(swapped, 'Nothing to swap');
91
- }
92
-
93
- getBuffer(varyingName = null) {
94
- return this.bufferTransform && this.bufferTransform.getBuffer(varyingName);
95
- }
96
-
97
- getData(options = {}) {
98
- const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
99
-
100
- for (const resourceTransform of resourceTransforms) {
101
- const data = resourceTransform.getData(options);
102
-
103
- if (data) {
104
- return data;
105
- }
106
- }
107
-
108
- return null;
109
- }
110
-
111
- getFramebuffer() {
112
- return this.textureTransform && this.textureTransform.getFramebuffer();
113
- }
114
-
115
- update(props) {
116
- if ('elementCount' in props) {
117
- this.model.setVertexCount(props.elementCount);
118
- }
119
-
120
- const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
121
-
122
- for (const resourceTransform of resourceTransforms) {
123
- resourceTransform.update(props);
124
- }
125
- }
126
-
127
- _initialize(props) {
128
- const {
129
- gl
130
- } = this;
131
-
132
- this._buildResourceTransforms(gl, props);
133
-
134
- props = this._updateModelProps(props);
135
- this.model = new Model(this.device, Object.assign({}, props, {
136
- fs: props.fs || getPassthroughFS({
137
- version: getShaderInfo(props.vs).version
138
- }),
139
- id: props.id || 'transform-model',
140
- drawMode: props.drawMode || GL.POINTS,
141
- vertexCount: props.elementCount
142
- }));
143
-
144
- if (this.bufferTransform) {
145
- this.bufferTransform.setupResources({
146
- model: this.model
147
- });
148
- }
149
- }
150
-
151
- _updateModelProps(props) {
152
- let updatedProps = { ...props
153
- };
154
- const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
155
-
156
- for (const resourceTransform of resourceTransforms) {
157
- updatedProps = resourceTransform.updateModelProps(updatedProps);
158
- }
159
-
160
- return updatedProps;
161
- }
162
-
163
- _buildResourceTransforms(gl, props) {
164
- if (canCreateBufferTransform(props)) {
165
- this.bufferTransform = new BufferTransform(gl, props);
166
- }
167
-
168
- if (canCreateTextureTransform(props)) {
169
- this.textureTransform = new TextureTransform(gl, props);
170
- }
171
-
172
- assert(this.bufferTransform || this.textureTransform, 'must provide source/feedback buffers or source/target textures');
173
- }
174
-
175
- _updateDrawOptions(options) {
176
- let updatedOpts = { ...options
177
- };
178
- const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
179
-
180
- for (const resourceTransform of resourceTransforms) {
181
- updatedOpts = Object.assign(updatedOpts, resourceTransform.getDrawOptions(updatedOpts));
182
- }
183
-
184
- return updatedOpts;
185
- }
186
-
187
- }
188
-
189
- function canCreateBufferTransform(props) {
190
- const canCreate = !isObjectEmpty(props.feedbackBuffers) || !isObjectEmpty(props.feedbackMap) || props.varyings && props.varyings.length > 0;
191
- return Boolean(canCreate);
192
- }
193
-
194
- function canCreateTextureTransform(props) {
195
- const canCreate = !isObjectEmpty(props._sourceTextures) || props._targetTexture || props._targetTextureVarying;
196
- return canCreate;
197
- }
198
- //# sourceMappingURL=transform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/transform/transform.ts"],"names":["assert","GL","getShaderInfo","getPassthroughFS","WebGLDevice","isObjectEmpty","Model","BufferTransform","TextureTransform","Transform","isSupported","device","webglDevice","attach","isWebGL2","constructor","props","gl","gl2","_initialize","Object","seal","destroy","model","bufferTransform","textureTransform","delete","run","options","clearRenderTarget","updatedOpts","_updateDrawOptions","framebuffer","clear","color","transform","swap","swapped","resourceTransforms","filter","Boolean","resourceTransform","getBuffer","varyingName","getData","data","getFramebuffer","update","setVertexCount","elementCount","_buildResourceTransforms","_updateModelProps","assign","fs","version","vs","id","drawMode","POINTS","vertexCount","setupResources","updatedProps","updateModelProps","canCreateBufferTransform","canCreateTextureTransform","getDrawOptions","canCreate","feedbackBuffers","feedbackMap","varyings","length","_sourceTextures","_targetTexture","_targetTextureVarying"],"mappings":"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","sourcesContent":["import {Device, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getShaderInfo, getPassthroughFS} from '@luma.gl/shadertools';\nimport type {Framebuffer, Buffer} from '@luma.gl/webgl';\nimport {WebGLDevice, isObjectEmpty} from '@luma.gl/webgl';\n\nimport Model from '../lib/model';\nimport BufferTransform from './buffer-transform';\nimport TextureTransform from './texture-transform';\nimport {TransformProps, TransformRunOptions, TransformDrawOptions} from './transform-types';\n\n/** \n * Takes source and target buffers/textures and sets up the pipeline \n */\nexport default class Transform {\n /** \n * Check if Transforms are supported (they are not under WebGL1)\n * @todo differentiate writing to buffer vs not\n */\n static isSupported(device: Device | WebGL2RenderingContext): boolean {\n try {\n const webglDevice = WebGLDevice.attach(device);\n return webglDevice.isWebGL2;\n } catch {\n return false;\n }\n }\n\n readonly device: WebGLDevice;\n readonly gl: WebGL2RenderingContext;\n model: Model | null = null;\n elementCount = 0;\n bufferTransform = null;\n textureTransform = null;\n elementIDBuffer = null;\n\n constructor(device: Device | WebGL2RenderingContext, props: TransformProps = {}) {\n this.device = WebGLDevice.attach(device);\n // TODO assert webgl2?\n this.gl = this.device.gl2;\n this._initialize(props);\n Object.seal(this);\n }\n\n /** Delete owned resources. */\n destroy(): void {\n const {model, bufferTransform, textureTransform} = this;\n if (model) {\n model.delete();\n }\n if (bufferTransform) {\n bufferTransform.delete();\n }\n if (textureTransform) {\n textureTransform.delete();\n }\n }\n\n /** @deprecated Use destroy*() */\n delete(): void {\n this.destroy();\n }\n\n /** Run one transform loop. */\n run(options?: TransformRunOptions): void {\n const {clearRenderTarget = true} = options || {};\n\n const updatedOpts = this._updateDrawOptions(options);\n\n if (clearRenderTarget && updatedOpts.framebuffer) {\n updatedOpts.framebuffer.clear({color: true});\n }\n\n this.model.transform(updatedOpts);\n }\n\n /** swap resources if a map is provided */\n swap(): void {\n let swapped = false;\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n swapped = swapped || resourceTransform.swap();\n }\n assert(swapped, 'Nothing to swap');\n }\n\n /** Return Buffer object for given varying name. */\n getBuffer(varyingName: string = null): Buffer {\n return this.bufferTransform && this.bufferTransform.getBuffer(varyingName);\n }\n\n /** Return data either from Buffer or from Texture */\n getData(options: {packed?: boolean; varyingName?: string} = {}) {\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n const data = resourceTransform.getData(options);\n if (data) {\n return data;\n }\n }\n return null;\n }\n\n /** Return framebuffer object if rendering to textures */\n getFramebuffer(): Framebuffer | null {\n return this.textureTransform && this.textureTransform.getFramebuffer();\n }\n\n /** Update some or all buffer/texture bindings. */\n update(props: TransformProps): void {\n if ('elementCount' in props) {\n this.model.setVertexCount(props.elementCount);\n }\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n resourceTransform.update(props);\n }\n }\n\n // Private\n\n _initialize(props: TransformProps): void {\n const {gl} = this;\n this._buildResourceTransforms(gl, props);\n\n props = this._updateModelProps(props);\n this.model = new Model(\n this.device,\n Object.assign({}, props, {\n fs: props.fs || getPassthroughFS({version: getShaderInfo(props.vs).version}),\n id: props.id || 'transform-model',\n drawMode: props.drawMode || GL.POINTS,\n vertexCount: props.elementCount\n })\n );\n\n if (this.bufferTransform) {\n this.bufferTransform.setupResources({model: this.model});\n }\n }\n\n _updateModelProps(props: TransformProps): TransformProps {\n let updatedProps = {...props};\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n updatedProps = resourceTransform.updateModelProps(updatedProps);\n }\n return updatedProps;\n }\n\n _buildResourceTransforms(gl: WebGL2RenderingContext, props: TransformProps) {\n if (canCreateBufferTransform(props)) {\n this.bufferTransform = new BufferTransform(gl, props);\n }\n if (canCreateTextureTransform(props)) {\n this.textureTransform = new TextureTransform(gl, props);\n }\n assert(\n this.bufferTransform || this.textureTransform,\n 'must provide source/feedback buffers or source/target textures'\n );\n }\n\n _updateDrawOptions(options: TransformRunOptions): TransformDrawOptions {\n let updatedOpts = {...options};\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n updatedOpts = Object.assign(updatedOpts, resourceTransform.getDrawOptions(updatedOpts));\n }\n return updatedOpts;\n }\n}\n\n// Helper Methods\n\nfunction canCreateBufferTransform(props: TransformProps): boolean {\n const canCreate = !isObjectEmpty(props.feedbackBuffers) ||\n !isObjectEmpty(props.feedbackMap) ||\n (props.varyings && props.varyings.length > 0);\n return Boolean(canCreate);\n}\n\nfunction canCreateTextureTransform(props: TransformProps): boolean {\n const canCreate =\n !isObjectEmpty(props._sourceTextures) ||\n props._targetTexture ||\n props._targetTextureVarying\n return canCreate;\n}\n"],"file":"transform.js"}
@@ -1,5 +0,0 @@
1
- import Model, { ModelProps } from '../lib/model';
2
- export default class ClipSpace extends Model {
3
- constructor(gl: WebGLRenderingContext, opts?: ModelProps);
4
- }
5
- //# sourceMappingURL=clip-space.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clip-space.d.ts","sourceRoot":"","sources":["../../src/utils/clip-space.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAwB/C,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,KAAK;gBAC9B,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,EAAE,UAAU;CAoBzD"}
@@ -1,34 +0,0 @@
1
- import GL from '@luma.gl/constants';
2
- import Model from '../lib/model';
3
- import Geometry from '../geometry/geometry';
4
- const CLIPSPACE_VERTEX_SHADER = "attribute vec2 aClipSpacePosition;\nattribute vec2 aTexCoord;\nattribute vec2 aCoordinate;\n\nvarying vec2 position;\nvarying vec2 coordinate;\nvarying vec2 uv;\n\nvoid main(void) {\n gl_Position = vec4(aClipSpacePosition, 0., 1.);\n position = aClipSpacePosition;\n coordinate = aCoordinate;\n uv = aTexCoord;\n}\n";
5
- const POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];
6
- export default class ClipSpace extends Model {
7
- constructor(gl, opts) {
8
- const TEX_COORDS = POSITIONS.map(coord => coord === -1 ? 0 : coord);
9
- super(gl, Object.assign({}, opts, {
10
- vs: CLIPSPACE_VERTEX_SHADER,
11
- geometry: new Geometry({
12
- drawMode: GL.TRIANGLE_STRIP,
13
- vertexCount: 4,
14
- attributes: {
15
- aClipSpacePosition: {
16
- size: 2,
17
- value: new Float32Array(POSITIONS)
18
- },
19
- aTexCoord: {
20
- size: 2,
21
- value: new Float32Array(TEX_COORDS)
22
- },
23
- aCoordinate: {
24
- size: 2,
25
- value: new Float32Array(TEX_COORDS)
26
- }
27
- }
28
- })
29
- }));
30
- this.setVertexCount(4);
31
- }
32
-
33
- }
34
- //# sourceMappingURL=clip-space.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utils/clip-space.ts"],"names":["GL","Model","Geometry","CLIPSPACE_VERTEX_SHADER","POSITIONS","ClipSpace","constructor","gl","opts","TEX_COORDS","map","coord","Object","assign","vs","geometry","drawMode","TRIANGLE_STRIP","vertexCount","attributes","aClipSpacePosition","size","value","Float32Array","aTexCoord","aCoordinate","setVertexCount"],"mappings":"AACA,OAAOA,EAAP,MAAe,oBAAf;AACA,OAAOC,KAAP,MAAgC,cAAhC;AACA,OAAOC,QAAP,MAAqB,sBAArB;AAEA,MAAMC,uBAAuB,oUAA7B;AAkBA,MAAMC,SAAS,GAAG,CAAC,CAAC,CAAF,EAAK,CAAC,CAAN,EAAS,CAAT,EAAY,CAAC,CAAb,EAAgB,CAAC,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,CAAlB;AAGA,eAAe,MAAMC,SAAN,SAAwBJ,KAAxB,CAA8B;AAC3CK,EAAAA,WAAW,CAACC,EAAD,EAA4BC,IAA5B,EAA+C;AACxD,UAAMC,UAAU,GAAGL,SAAS,CAACM,GAAV,CAAeC,KAAD,IAAYA,KAAK,KAAK,CAAC,CAAX,GAAe,CAAf,GAAmBA,KAA7C,CAAnB;AAEA,UACEJ,EADF,EAEEK,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBL,IAAlB,EAAwB;AACtBM,MAAAA,EAAE,EAAEX,uBADkB;AAEtBY,MAAAA,QAAQ,EAAE,IAAIb,QAAJ,CAAa;AACrBc,QAAAA,QAAQ,EAAEhB,EAAE,CAACiB,cADQ;AAErBC,QAAAA,WAAW,EAAE,CAFQ;AAGrBC,QAAAA,UAAU,EAAE;AACVC,UAAAA,kBAAkB,EAAE;AAACC,YAAAA,IAAI,EAAE,CAAP;AAAUC,YAAAA,KAAK,EAAE,IAAIC,YAAJ,CAAiBnB,SAAjB;AAAjB,WADV;AAEVoB,UAAAA,SAAS,EAAE;AAACH,YAAAA,IAAI,EAAE,CAAP;AAAUC,YAAAA,KAAK,EAAE,IAAIC,YAAJ,CAAiBd,UAAjB;AAAjB,WAFD;AAGVgB,UAAAA,WAAW,EAAE;AAACJ,YAAAA,IAAI,EAAE,CAAP;AAAUC,YAAAA,KAAK,EAAE,IAAIC,YAAJ,CAAiBd,UAAjB;AAAjB;AAHH;AAHS,OAAb;AAFY,KAAxB,CAFF;AAeA,SAAKiB,cAAL,CAAoB,CAApB;AACD;;AApB0C","sourcesContent":["// ClipSpace\nimport GL from '@luma.gl/constants';\nimport Model, {ModelProps} from '../lib/model';\nimport Geometry from '../geometry/geometry';\n\nconst CLIPSPACE_VERTEX_SHADER = `\\\nattribute vec2 aClipSpacePosition;\nattribute vec2 aTexCoord;\nattribute vec2 aCoordinate;\n\nvarying vec2 position;\nvarying vec2 coordinate;\nvarying vec2 uv;\n\nvoid main(void) {\n gl_Position = vec4(aClipSpacePosition, 0., 1.);\n position = aClipSpacePosition;\n coordinate = aCoordinate;\n uv = aTexCoord;\n}\n`;\n\n/* eslint-disable indent, no-multi-spaces */\nconst POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];\n\n\nexport default class ClipSpace extends Model {\n constructor(gl: WebGLRenderingContext, opts?: ModelProps) {\n const TEX_COORDS = POSITIONS.map((coord) => (coord === -1 ? 0 : coord));\n\n super(\n gl,\n Object.assign({}, opts, {\n vs: CLIPSPACE_VERTEX_SHADER,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_STRIP,\n vertexCount: 4,\n attributes: {\n aClipSpacePosition: {size: 2, value: new Float32Array(POSITIONS)},\n aTexCoord: {size: 2, value: new Float32Array(TEX_COORDS)},\n aCoordinate: {size: 2, value: new Float32Array(TEX_COORDS)}\n }\n })\n })\n );\n this.setVertexCount(4);\n }\n}\n"],"file":"clip-space.js"}
@@ -1,187 +0,0 @@
1
- import {Device} from '@luma.gl/api/';
2
- import {assembleShaders} from '@luma.gl/shadertools';
3
- import {Program} from '@luma.gl/webgl';
4
-
5
- type Module = 'string' | {name: string}; // TODO
6
-
7
- type GetProgramOptions = {
8
- vs?: string,
9
- fs?: string,
10
- defines?: {},
11
- inject?: {},
12
- varyings?: string[],
13
- bufferMode?: number,
14
- modules?: Module[];
15
- transpileToGLSL100?: boolean
16
- };
17
-
18
- export default class ProgramManager {
19
- readonly device: Device;
20
-
21
- stateHash = 0; // Used change hashing if hooks are modified
22
- private _hashCounter = 0;
23
- private readonly _hashes = {};
24
- private readonly _useCounts = {};
25
-
26
- private readonly _programCache = {};
27
- private readonly _getUniforms = {};
28
- private readonly _registeredModules = {}; // TODO: Remove? This isn't used anywhere in luma.gl
29
- private readonly _hookFunctions = [];
30
- private _defaultModules = [];
31
-
32
- static getDefaultProgramManager(device: Device): ProgramManager {
33
- // @ts-expect-error
34
- device.defaultProgramManager = device.defaultProgramManager || new ProgramManager(device);
35
- // @ts-expect-error
36
- return device.defaultProgramManager;
37
- }
38
-
39
- constructor(device: Device) {
40
- this.device = device;
41
- }
42
-
43
- addDefaultModule(module: Module): void {
44
- // @ts-expect-error
45
- if (!this._defaultModules.find((m) => m.name === module.name)) {
46
- this._defaultModules.push(module);
47
- }
48
-
49
- this.stateHash++;
50
- }
51
-
52
- removeDefaultModule(module: Module): void {
53
- const moduleName = typeof module === 'string' ? module : module.name;
54
- this._defaultModules = this._defaultModules.filter((m) => m.name !== moduleName);
55
- this.stateHash++;
56
- }
57
-
58
- addShaderHook(hook, opts?): void {
59
- if (opts) {
60
- hook = Object.assign(opts, {hook});
61
- }
62
-
63
- this._hookFunctions.push(hook);
64
- this.stateHash++;
65
- }
66
-
67
- get(props: GetProgramOptions = {}): Program {
68
- const {
69
- vs = '',
70
- fs = '',
71
- defines = {},
72
- inject = {},
73
- varyings = [],
74
- bufferMode = 0x8c8d,
75
- transpileToGLSL100 = false
76
- } = props; // varyings/bufferMode for xform feedback, 0x8c8d = SEPARATE_ATTRIBS
77
-
78
- const modules = this._getModuleList(props.modules); // Combine with default modules
79
-
80
- const vsHash = this._getHash(vs);
81
- const fsHash = this._getHash(fs);
82
- // @ts-expect-error
83
- const moduleHashes = modules.map((m) => this._getHash(m.name)).sort();
84
- const varyingHashes = varyings.map((v) => this._getHash(v));
85
-
86
- const defineKeys = Object.keys(defines).sort();
87
- const injectKeys = Object.keys(inject).sort();
88
- const defineHashes = [];
89
- const injectHashes = [];
90
-
91
- for (const key of defineKeys) {
92
- defineHashes.push(this._getHash(key));
93
- defineHashes.push(this._getHash(defines[key]));
94
- }
95
-
96
- for (const key of injectKeys) {
97
- injectHashes.push(this._getHash(key));
98
- injectHashes.push(this._getHash(inject[key]));
99
- }
100
-
101
- const hash = `${vsHash}/${fsHash}D${defineHashes.join('/')}M${moduleHashes.join(
102
- '/'
103
- )}I${injectHashes.join('/')}V${varyingHashes.join('/')}H${this.stateHash}B${bufferMode}${
104
- transpileToGLSL100 ? 'T' : ''
105
- }`;
106
-
107
- if (!this._programCache[hash]) {
108
- const assembled = assembleShaders(this.device, {
109
- vs,
110
- fs,
111
- modules,
112
- inject,
113
- defines,
114
- hookFunctions: this._hookFunctions,
115
- transpileToGLSL100
116
- });
117
-
118
- // @ts-expect-error TODO - program should be created from device
119
- this._programCache[hash] = new Program(this.device.gl, {
120
- hash,
121
- vs: assembled.vs,
122
- fs: assembled.fs,
123
- varyings,
124
- bufferMode
125
- });
126
-
127
- this._getUniforms[hash] = assembled.getUniforms || ((x) => {});
128
- this._useCounts[hash] = 0;
129
- }
130
-
131
- this._useCounts[hash]++;
132
-
133
- return this._programCache[hash];
134
- }
135
-
136
- getUniforms(program: Program) {
137
- return this._getUniforms[program.hash] || null;
138
- }
139
-
140
- release(program: Program): void {
141
- const hash = program.hash;
142
- this._useCounts[hash]--;
143
-
144
- if (this._useCounts[hash] === 0) {
145
- this._programCache[hash].delete();
146
- delete this._programCache[hash];
147
- delete this._getUniforms[hash];
148
- delete this._useCounts[hash];
149
- }
150
- }
151
-
152
- _getHash(key: string): string {
153
- if (this._hashes[key] === undefined) {
154
- this._hashes[key] = this._hashCounter++;
155
- }
156
-
157
- return this._hashes[key];
158
- }
159
-
160
- // Dedup and combine with default modules
161
- _getModuleList(appModules: Module[] = []): Module[] {
162
- const modules = new Array(this._defaultModules.length + appModules.length);
163
- const seen = {};
164
- let count = 0;
165
-
166
- for (let i = 0, len = this._defaultModules.length; i < len; ++i) {
167
- const module = this._defaultModules[i];
168
- const name = module.name;
169
- modules[count++] = module;
170
- seen[name] = true;
171
- }
172
-
173
- for (let i = 0, len = appModules.length; i < len; ++i) {
174
- const module = appModules[i];
175
- // @ts-expect-error
176
- const name = module.name;
177
- if (!seen[name]) {
178
- modules[count++] = module;
179
- seen[name] = true;
180
- }
181
- }
182
-
183
- modules.length = count;
184
-
185
- return modules;
186
- }
187
- }