@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
package/dist/lib/model.js CHANGED
@@ -1,573 +1,176 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import GL from '@luma.gl/constants';
3
- import { WebGLDevice, Program, VertexArray, clear, TransformFeedback, Buffer, log, isObjectEmpty, uid, assert } from '@luma.gl/webgl';
4
- import { getDebugTableForUniforms, getDebugTableForVertexArray, getDebugTableForProgramConfiguration } from '@luma.gl/webgl';
5
- import ProgramManager from './program-manager';
6
- import { getBuffersFromGeometry } from './model-utils';
7
- const LOG_DRAW_PRIORITY = 2;
8
- const LOG_DRAW_TIMEOUT = 10000;
9
- const ERR_MODEL_PARAMS = 'Model needs drawMode and vertexCount';
10
-
11
- const NOOP = () => {};
12
-
13
- const DRAW_PARAMS = {};
2
+ import { RenderPipeline } from '@luma.gl/api';
3
+ import { getAttributeBuffersFromGeometry, getIndexBufferFromGeometry } from './model-utils';
4
+ import PipelineFactory from './pipeline-factory';
5
+ const DEFAULT_MODEL_PROPS = { ...RenderPipeline._DEFAULT_PROPS,
6
+ vs: undefined,
7
+ fs: undefined,
8
+ id: 'unnamed',
9
+ handle: undefined,
10
+ userData: {},
11
+ modules: [],
12
+ moduleSettings: {},
13
+ geometry: undefined
14
+ };
14
15
  export default class Model {
15
- constructor(device, props = {}) {
16
+ constructor(device, props) {
16
17
  _defineProperty(this, "device", void 0);
17
18
 
18
- _defineProperty(this, "gl", void 0);
19
+ _defineProperty(this, "pipeline", void 0);
19
20
 
20
21
  _defineProperty(this, "id", void 0);
21
22
 
22
- _defineProperty(this, "animated", false);
23
+ _defineProperty(this, "vs", void 0);
23
24
 
24
- _defineProperty(this, "programManager", void 0);
25
+ _defineProperty(this, "fs", void 0);
25
26
 
26
- _defineProperty(this, "vertexCount", void 0);
27
+ _defineProperty(this, "topology", void 0);
27
28
 
28
- _defineProperty(this, "lastLogTime", 0);
29
+ _defineProperty(this, "vertexCount", void 0);
29
30
 
30
31
  _defineProperty(this, "props", void 0);
31
32
 
32
- _defineProperty(this, "userData", {});
33
-
34
- _defineProperty(this, "needsRedraw", true);
35
-
36
- _defineProperty(this, "attributes", {});
37
-
38
- _defineProperty(this, "_attributes", {});
39
-
40
- _defineProperty(this, "uniforms", {});
41
-
42
- _defineProperty(this, "drawMode", void 0);
43
-
44
- _defineProperty(this, "instanceCount", void 0);
45
-
46
- _defineProperty(this, "pickable", true);
47
-
48
- _defineProperty(this, "programProps", void 0);
49
-
50
- _defineProperty(this, "vertexArray", void 0);
51
-
52
- _defineProperty(this, "program", void 0);
53
-
54
- _defineProperty(this, "transformFeedback", void 0);
55
-
56
- _defineProperty(this, "_programDirty", true);
57
-
58
- _defineProperty(this, "_programManagerState", void 0);
59
-
60
- _defineProperty(this, "_managedProgram", void 0);
61
-
62
- _defineProperty(this, "geometryBuffers", {});
63
-
64
- _defineProperty(this, "isInstanced", void 0);
65
-
66
- _defineProperty(this, "geometry", {});
67
-
68
- const {
69
- id = uid('model')
70
- } = props;
71
- this.id = id;
72
- const webglDevice = WebGLDevice.attach(device);
73
- this.device = webglDevice;
74
- this.gl = webglDevice.gl;
75
- this.id = props.id || uid('Model');
76
- this.initialize(props);
77
- }
78
-
79
- initialize(props) {
80
- this.props = {};
81
- this.programManager = props.programManager || ProgramManager.getDefaultProgramManager(this.device);
82
- this._programManagerState = -1;
83
- this._managedProgram = false;
84
- const {
85
- program = null,
86
- vs,
87
- fs,
88
- modules,
89
- defines,
90
- inject,
91
- varyings,
92
- bufferMode,
93
- transpileToGLSL100
94
- } = props;
95
- this.programProps = {
96
- program,
97
- modules,
98
- vs,
99
- fs,
100
- defines,
101
- inject,
102
- varyings,
103
- bufferMode,
104
- transpileToGLSL100
105
- };
106
- this.program = null;
107
- this.vertexArray = null;
108
- this._programDirty = true;
109
- this.userData = {};
110
- this.needsRedraw = true;
111
- this._attributes = {};
112
- this.attributes = {};
113
- this.uniforms = {};
114
- this.pickable = true;
115
-
116
- this._checkProgram();
117
-
118
- this.setUniforms(Object.assign({}, this.getModuleUniforms(props.moduleSettings)));
119
- this.drawMode = props.drawMode !== undefined ? props.drawMode : GL.TRIANGLES;
120
- this.vertexCount = props.vertexCount || 0;
121
- this.geometryBuffers = {};
122
- this.isInstanced = props.isInstanced || props.instanced || props.instanceCount > 0;
123
-
124
- this._setModelProps(props);
125
-
126
- this.geometry = {};
127
- assert(this.drawMode !== undefined && Number.isFinite(this.vertexCount), ERR_MODEL_PARAMS);
128
- }
129
-
130
- setProps(props) {
131
- this._setModelProps(props);
132
- }
133
-
134
- destroy() {
135
- for (const key in this._attributes) {
136
- if (this._attributes[key] !== this.attributes[key]) {
137
- this._attributes[key].delete();
138
- }
139
- }
140
-
141
- if (this._managedProgram) {
142
- this.programManager.release(this.program);
143
- this._managedProgram = false;
144
- }
145
-
146
- this.vertexArray.delete();
147
-
148
- this._deleteGeometryBuffers();
149
- }
150
-
151
- delete() {
152
- this.destroy();
153
- }
154
-
155
- getDrawMode() {
156
- return this.drawMode;
157
- }
158
-
159
- getVertexCount() {
160
- return this.vertexCount;
161
- }
162
-
163
- getInstanceCount() {
164
- return this.instanceCount;
165
- }
166
-
167
- getAttributes() {
168
- return this.attributes;
169
- }
33
+ _defineProperty(this, "_getModuleUniforms", void 0);
170
34
 
171
- getProgram() {
172
- return this.program;
173
- }
174
-
175
- setProgram(props) {
176
- const {
177
- program,
178
- vs,
179
- fs,
180
- modules,
181
- defines,
182
- inject,
183
- varyings,
184
- bufferMode,
185
- transpileToGLSL100
186
- } = props;
187
- this.programProps = {
188
- program,
189
- vs,
190
- fs,
191
- modules,
192
- defines,
193
- inject,
194
- varyings,
195
- bufferMode,
196
- transpileToGLSL100
35
+ this.props = { ...DEFAULT_MODEL_PROPS,
36
+ ...props
197
37
  };
198
- this._programDirty = true;
199
- }
200
-
201
- getUniforms() {
202
- return this.uniforms;
203
- }
204
-
205
- setDrawMode(drawMode) {
206
- this.drawMode = drawMode;
207
- return this;
208
- }
38
+ props = this.props;
39
+ this.id = props.id;
40
+ this.device = device;
41
+ this.vs = getShaderSource(this.device, props.vs);
209
42
 
210
- setVertexCount(vertexCount) {
211
- assert(Number.isFinite(vertexCount));
212
- this.vertexCount = vertexCount;
213
- return this;
214
- }
215
-
216
- setInstanceCount(instanceCount) {
217
- assert(Number.isFinite(instanceCount));
218
- this.instanceCount = instanceCount;
219
- return this;
220
- }
221
-
222
- setGeometry(geometry) {
223
- this.drawMode = geometry.drawMode;
224
- this.vertexCount = geometry.getVertexCount();
225
-
226
- this._deleteGeometryBuffers();
227
-
228
- this.geometryBuffers = getBuffersFromGeometry(this.gl, geometry);
229
- this.vertexArray.setAttributes(this.geometryBuffers);
230
- return this;
231
- }
232
-
233
- setAttributes(attributes = {}) {
234
- if (isObjectEmpty(attributes)) {
235
- return this;
43
+ if (props.fs) {
44
+ this.fs = getShaderSource(this.device, props.fs);
236
45
  }
237
46
 
238
- const normalizedAttributes = {};
47
+ this.vertexCount = this.props.vertexCount;
48
+ this.topology = this.props.topology;
239
49
 
240
- for (const name in attributes) {
241
- const attribute = attributes[name];
242
- normalizedAttributes[name] = attribute.getValue ? attribute.getValue() : attribute;
50
+ if (this.props.geometry) {
51
+ this.vertexCount = this.props.geometry.vertexCount;
52
+ this.topology = this.props.geometry.topology;
243
53
  }
244
54
 
245
- this.vertexArray.setAttributes(normalizedAttributes);
246
- return this;
247
- }
248
-
249
- setUniforms(uniforms = {}) {
250
- Object.assign(this.uniforms, uniforms);
251
- return this;
252
- }
253
-
254
- getModuleUniforms(opts) {
255
- this._checkProgram();
256
-
257
- const getUniforms = this.programManager.getUniforms(this.program);
55
+ const {
56
+ renderPipeline,
57
+ getUniforms
58
+ } = PipelineFactory.getDefaultPipelineFactory(this.device).createRenderPipeline({ ...this.props,
59
+ vs: this.vs,
60
+ fs: this.fs,
61
+ topology: this.topology,
62
+ parameters: props.parameters,
63
+ layout: props.layout
64
+ });
65
+ this.pipeline = renderPipeline;
66
+ this._getModuleUniforms = getUniforms;
258
67
 
259
- if (getUniforms) {
260
- return getUniforms(opts);
68
+ if (this.props.geometry) {
69
+ this._setGeometry(this.props.geometry);
261
70
  }
262
71
 
263
- return {};
72
+ this.setUniforms(this._getModuleUniforms());
73
+ this.setProps(this.props);
264
74
  }
265
75
 
266
- updateModuleSettings(opts) {
267
- const uniforms = this.getModuleUniforms(opts || {});
268
- return this.setUniforms(uniforms);
76
+ destroy() {
77
+ this.pipeline.destroy();
269
78
  }
270
79
 
271
- clear(opts) {
272
- clear(this.program.gl, opts);
80
+ draw(renderPass) {
81
+ this.pipeline.draw({
82
+ renderPass,
83
+ vertexCount: this.vertexCount,
84
+ instanceCount: this.props.instanceCount
85
+ });
273
86
  return this;
274
87
  }
275
88
 
276
- draw(opts = {}) {
277
- this._checkProgram();
278
-
279
- const {
280
- moduleSettings = null,
281
- framebuffer,
282
- uniforms = {},
283
- attributes = {},
284
- transformFeedback = this.transformFeedback,
285
- parameters = {},
286
- vertexArray = this.vertexArray
287
- } = opts;
288
- this.setAttributes(attributes);
289
- this.updateModuleSettings(moduleSettings);
290
- this.setUniforms(uniforms);
291
- let logPriority;
292
-
293
- if (log.priority >= LOG_DRAW_PRIORITY) {
294
- logPriority = this._logDrawCallStart(LOG_DRAW_PRIORITY);
295
- }
296
-
297
- const drawParams = this.vertexArray.getDrawParams();
298
- const {
299
- isIndexed = drawParams.isIndexed,
300
- indexType = drawParams.indexType,
301
- indexOffset = drawParams.indexOffset,
302
- vertexArrayInstanced = drawParams.isInstanced
303
- } = this.props;
304
-
305
- if (vertexArrayInstanced && !this.isInstanced) {
306
- log.warn('Found instanced attributes on non-instanced model', this.id)();
89
+ setProps(props) {
90
+ if (props.indices) {
91
+ this.setIndexBuffer(props.indices);
307
92
  }
308
93
 
309
- const {
310
- isInstanced,
311
- instanceCount
312
- } = this;
313
- const {
314
- onBeforeRender = NOOP,
315
- onAfterRender = NOOP
316
- } = this.props;
317
- onBeforeRender();
318
- this.program.setUniforms(this.uniforms);
319
- const didDraw = this.program.draw(Object.assign(DRAW_PARAMS, opts, {
320
- logPriority,
321
- uniforms: null,
322
- framebuffer,
323
- parameters,
324
- drawMode: this.getDrawMode(),
325
- vertexCount: this.getVertexCount(),
326
- vertexArray,
327
- transformFeedback,
328
- isIndexed,
329
- indexType,
330
- isInstanced,
331
- instanceCount,
332
- offset: isIndexed ? indexOffset : 0
333
- }));
334
- onAfterRender();
335
-
336
- if (log.priority >= LOG_DRAW_PRIORITY) {
337
- this._logDrawCallEnd(logPriority, vertexArray, framebuffer);
94
+ if (props.attributes) {
95
+ this.setAttributes(props.attributes);
338
96
  }
339
97
 
340
- return didDraw;
341
- }
342
-
343
- transform(opts = {}) {
344
- const {
345
- discard = true,
346
- feedbackBuffers,
347
- unbindModels = []
348
- } = opts;
349
- let {
350
- parameters
351
- } = opts;
352
-
353
- if (feedbackBuffers) {
354
- this._setFeedbackBuffers(feedbackBuffers);
98
+ if (props.bindings) {
99
+ this.setBindings(props.bindings);
355
100
  }
356
101
 
357
- if (discard) {
358
- parameters = Object.assign({}, parameters, {
359
- [GL.RASTERIZER_DISCARD]: discard
360
- });
102
+ if (props.uniforms) {
103
+ this.setUniforms(props.uniforms);
361
104
  }
362
105
 
363
- unbindModels.forEach(model => model.vertexArray.unbindBuffers());
364
-
365
- try {
366
- this.draw(Object.assign({}, opts, {
367
- parameters
368
- }));
369
- } finally {
370
- unbindModels.forEach(model => model.vertexArray.bindBuffers());
106
+ if (props.moduleSettings) {
107
+ this.updateModuleSettings(props.moduleSettings);
371
108
  }
372
109
 
373
110
  return this;
374
111
  }
375
112
 
376
- render(uniforms = {}) {
377
- log.warn('Model.render() is deprecated. Use Model.setUniforms() and Model.draw()')();
378
- return this.setUniforms(uniforms).draw();
379
- }
380
-
381
- _setModelProps(props) {
382
- Object.assign(this.props, props);
383
-
384
- if ('uniforms' in props) {
385
- this.setUniforms(props.uniforms);
386
- }
113
+ updateModuleSettings(props) {
114
+ const uniforms = this._getModuleUniforms(props);
387
115
 
388
- if ('pickable' in props) {
389
- this.pickable = props.pickable;
390
- }
391
-
392
- if ('instanceCount' in props) {
393
- this.instanceCount = props.instanceCount;
394
- }
395
-
396
- if ('geometry' in props) {
397
- this.setGeometry(props.geometry);
398
- }
399
-
400
- if ('attributes' in props) {
401
- this.setAttributes(props.attributes);
402
- }
403
-
404
- if ('_feedbackBuffers' in props) {
405
- this._setFeedbackBuffers(props._feedbackBuffers);
406
- }
116
+ this.setUniforms(uniforms);
117
+ return this;
407
118
  }
408
119
 
409
- _checkProgram() {
410
- const needsUpdate = this._programDirty || this.programManager.stateHash !== this._programManagerState;
411
-
412
- if (!needsUpdate) {
413
- return;
414
- }
415
-
416
- let {
417
- program
418
- } = this.programProps;
419
-
420
- if (program) {
421
- this._managedProgram = false;
422
- } else {
423
- const {
424
- vs,
425
- fs,
426
- modules,
427
- inject,
428
- defines,
429
- varyings,
430
- bufferMode,
431
- transpileToGLSL100
432
- } = this.programProps;
433
- program = this.programManager.get({
434
- vs,
435
- fs,
436
- modules,
437
- inject,
438
- defines,
439
- varyings,
440
- bufferMode,
441
- transpileToGLSL100
442
- });
443
-
444
- if (this.program && this._managedProgram) {
445
- this.programManager.release(this.program);
446
- }
447
-
448
- this._programManagerState = this.programManager.stateHash;
449
- this._managedProgram = true;
450
- }
451
-
452
- assert(program instanceof Program, 'Model needs a program');
453
- this._programDirty = false;
454
-
455
- if (program === this.program) {
456
- return;
457
- }
458
-
459
- this.program = program;
460
-
461
- if (this.vertexArray) {
462
- this.vertexArray.setProps({
463
- program: this.program,
464
- attributes: this.vertexArray.attributes
465
- });
466
- } else {
467
- this.vertexArray = new VertexArray(this.gl, {
468
- program: this.program
469
- });
470
- }
471
-
472
- this.setUniforms(Object.assign({}, this.getModuleUniforms()));
120
+ setIndexBuffer(indices) {
121
+ this.pipeline.setIndexBuffer(indices);
122
+ return this;
473
123
  }
474
124
 
475
- _deleteGeometryBuffers() {
476
- for (const name in this.geometryBuffers) {
477
- const buffer = this.geometryBuffers[name][0] || this.geometryBuffers[name];
478
-
479
- if (buffer instanceof Buffer) {
480
- buffer.destroy();
481
- }
482
- }
125
+ setAttributes(attributes) {
126
+ this.pipeline.setAttributes(attributes);
127
+ Object.assign(this.props.attributes, attributes);
128
+ return this;
483
129
  }
484
130
 
485
- _setAnimationProps(animationProps) {
486
- if (this.animated) {
487
- assert(animationProps, 'Model.draw(): animated uniforms but no animationProps');
488
- }
131
+ setBindings(bindings) {
132
+ this.pipeline.setBindings(bindings);
133
+ Object.assign(this.props.bindings, bindings);
134
+ return this;
489
135
  }
490
136
 
491
- _setFeedbackBuffers(feedbackBuffers = {}) {
492
- if (isObjectEmpty(feedbackBuffers)) {
493
- return this;
494
- }
495
-
496
- const {
497
- gl
498
- } = this.program;
499
- this.transformFeedback = this.transformFeedback || new TransformFeedback(gl, {
500
- program: this.program
501
- });
502
- this.transformFeedback.setBuffers(feedbackBuffers);
137
+ setUniforms(uniforms) {
138
+ this.pipeline.setUniforms(uniforms);
139
+ Object.assign(this.props.uniforms, uniforms);
503
140
  return this;
504
141
  }
505
142
 
506
- _logDrawCallStart(logLevel) {
507
- const logDrawTimeout = logLevel > 3 ? 0 : LOG_DRAW_TIMEOUT;
143
+ _setGeometry(geometry) {
144
+ const geometryBuffers = getAttributeBuffersFromGeometry(this.device, geometry);
145
+ this.setAttributes(geometryBuffers);
146
+ const indexBuffer = getIndexBufferFromGeometry(this.device, geometry);
508
147
 
509
- if (Date.now() - this.lastLogTime < logDrawTimeout) {
510
- return undefined;
148
+ if (indexBuffer) {
149
+ this.setIndexBuffer(indexBuffer);
511
150
  }
512
-
513
- this.lastLogTime = Date.now();
514
- log.group(LOG_DRAW_PRIORITY, ">>> DRAWING MODEL ".concat(this.id), {
515
- collapsed: log.level <= 2
516
- })();
517
- return logLevel;
518
151
  }
519
152
 
520
- _logDrawCallEnd(logLevel, vertexArray, uniforms, framebuffer) {
521
- if (logLevel === undefined) {
522
- return;
523
- }
524
-
525
- const attributeTable = getDebugTableForVertexArray({
526
- vertexArray,
527
- header: "".concat(this.id, " attributes"),
528
- attributes: this._attributes
529
- });
530
- const {
531
- table: uniformTable,
532
- unusedTable,
533
- unusedCount
534
- } = getDebugTableForUniforms({
535
- header: "".concat(this.id, " uniforms"),
536
- program: this.program,
537
- uniforms: Object.assign({}, this.program.uniforms, uniforms)
538
- });
539
- const {
540
- table: missingTable,
541
- count: missingCount
542
- } = getDebugTableForUniforms({
543
- header: "".concat(this.id, " uniforms"),
544
- program: this.program,
545
- uniforms: Object.assign({}, this.program.uniforms, uniforms),
546
- undefinedOnly: true
547
- });
153
+ }
548
154
 
549
- if (missingCount > 0) {
550
- log.log('MISSING UNIFORMS', Object.keys(missingTable))();
551
- }
155
+ function getShaderSource(device, shader) {
156
+ if (typeof shader === 'string') {
157
+ return shader;
158
+ }
552
159
 
553
- if (unusedCount > 0) {
554
- log.log('UNUSED UNIFORMS', Object.keys(unusedTable))();
555
- }
160
+ switch (device.info.type) {
161
+ case 'webgpu':
162
+ if (shader !== null && shader !== void 0 && shader.wgsl) {
163
+ return shader.wgsl;
164
+ }
556
165
 
557
- const configTable = getDebugTableForProgramConfiguration(this.vertexArray.configuration);
558
- log.table(logLevel, attributeTable)();
559
- log.table(logLevel, uniformTable)();
560
- log.table(logLevel + 1, configTable)();
166
+ throw new Error('WebGPU does not support GLSL shaders');
561
167
 
562
- if (framebuffer) {
563
- framebuffer.log({
564
- logLevel: LOG_DRAW_PRIORITY,
565
- message: "Rendered to ".concat(framebuffer.id)
566
- });
567
- }
168
+ default:
169
+ if (shader !== null && shader !== void 0 && shader.glsl) {
170
+ return shader.glsl;
171
+ }
568
172
 
569
- log.groupEnd(LOG_DRAW_PRIORITY)();
173
+ throw new Error('WebGL does not support WGSL shaders');
570
174
  }
571
-
572
175
  }
573
176
  //# sourceMappingURL=model.js.map