@luma.gl/engine 9.0.0-alpha.32 → 9.0.0-alpha.34

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 (53) hide show
  1. package/dist/animation/key-frames.js +6 -7
  2. package/dist/animation/key-frames.js.map +1 -1
  3. package/dist/animation/timeline.js +5 -6
  4. package/dist/animation/timeline.js.map +1 -1
  5. package/dist/animation-loop/animation-loop.js +18 -19
  6. package/dist/animation-loop/animation-loop.js.map +1 -1
  7. package/dist/dist.dev.js +173 -145
  8. package/dist/geometries/ico-sphere-geometry.js +1 -1
  9. package/dist/geometries/ico-sphere-geometry.js.map +1 -1
  10. package/dist/geometries/plane-geometry.js +4 -4
  11. package/dist/geometries/plane-geometry.js.map +1 -1
  12. package/dist/geometry/geometry.d.ts +19 -4
  13. package/dist/geometry/geometry.d.ts.map +1 -1
  14. package/dist/geometry/geometry.js +9 -11
  15. package/dist/geometry/geometry.js.map +1 -1
  16. package/dist/geometry/gpu-geometry.d.ts +10 -18
  17. package/dist/geometry/gpu-geometry.d.ts.map +1 -1
  18. package/dist/geometry/gpu-geometry.js +44 -65
  19. package/dist/geometry/gpu-geometry.js.map +1 -1
  20. package/dist/index.cjs +68 -93
  21. package/dist/lib/clip-space.js +16 -3
  22. package/dist/lib/clip-space.js.map +1 -1
  23. package/dist/lib/pipeline-factory.d.ts.map +1 -1
  24. package/dist/lib/pipeline-factory.js +15 -11
  25. package/dist/lib/pipeline-factory.js.map +1 -1
  26. package/dist/model/model.d.ts +2 -1
  27. package/dist/model/model.d.ts.map +1 -1
  28. package/dist/model/model.js +42 -44
  29. package/dist/model/model.js.map +1 -1
  30. package/dist/scenegraph/group-node.js +1 -2
  31. package/dist/scenegraph/group-node.js.map +1 -1
  32. package/dist/scenegraph/model-node.js +3 -4
  33. package/dist/scenegraph/model-node.js.map +1 -1
  34. package/dist/scenegraph/scenegraph-node.js +9 -10
  35. package/dist/scenegraph/scenegraph-node.js.map +1 -1
  36. package/dist/transform/transform.js +4 -5
  37. package/dist/transform/transform.js.map +1 -1
  38. package/dist.min.js +75 -75
  39. package/package.json +6 -6
  40. package/src/geometry/geometry.ts +19 -16
  41. package/src/geometry/gpu-geometry.ts +32 -67
  42. package/src/lib/pipeline-factory.ts +13 -10
  43. package/src/model/model.ts +23 -24
  44. package/dist/model/model-shaders.d.ts +0 -35
  45. package/dist/model/model-shaders.d.ts.map +0 -1
  46. package/dist/model/model-shaders.js +0 -38
  47. package/dist/model/model-shaders.js.map +0 -1
  48. package/dist/model/model-utils.d.ts +0 -5
  49. package/dist/model/model-utils.d.ts.map +0 -1
  50. package/dist/model/model-utils.js +0 -40
  51. package/dist/model/model-utils.js.map +0 -1
  52. package/src/model/model-shaders.ts +0 -76
  53. package/src/model/model-utils.ts +0 -125
package/dist/dist.dev.js CHANGED
@@ -1369,7 +1369,7 @@ var __exports__ = (() => {
1369
1369
  // Resource creation helpers
1370
1370
  _getBufferProps(props) {
1371
1371
  if (props instanceof ArrayBuffer || ArrayBuffer.isView(props)) {
1372
- return {
1372
+ props = {
1373
1373
  data: props
1374
1374
  };
1375
1375
  }
@@ -1381,6 +1381,8 @@ var __exports__ = (() => {
1381
1381
  newProps.indexType = "uint32";
1382
1382
  } else if (props.data instanceof Uint16Array) {
1383
1383
  newProps.indexType = "uint16";
1384
+ } else {
1385
+ log.warn("indices buffer content must be of integer type")();
1384
1386
  }
1385
1387
  }
1386
1388
  return newProps;
@@ -2456,8 +2458,8 @@ var __exports__ = (() => {
2456
2458
  const vertexFormat = bufferMapping?.vertexFormat || attributeTypeInfo.defaultVertexFormat;
2457
2459
  const vertexFormatInfo = decodeVertexFormat(vertexFormat);
2458
2460
  return {
2459
- name: name2,
2460
- bufferName: bufferMapping?.name || name2,
2461
+ attributeName: bufferMapping?.attributeName || shaderDeclaration.name,
2462
+ bufferName: bufferMapping?.bufferName || shaderDeclaration.name,
2461
2463
  location: shaderDeclaration.location,
2462
2464
  shaderType: shaderDeclaration.type,
2463
2465
  shaderDataType: attributeTypeInfo.dataType,
@@ -2481,38 +2483,63 @@ var __exports__ = (() => {
2481
2483
  }
2482
2484
  return attribute || null;
2483
2485
  }
2484
- function getAttributeFromBufferLayout(bufferLayout, name2) {
2485
- for (const bufferMapping of bufferLayout) {
2486
- if (bufferMapping.name === name2) {
2486
+ function getAttributeFromBufferLayout(bufferLayouts, name2) {
2487
+ checkBufferLayouts(bufferLayouts);
2488
+ let bufferLayoutInfo = getAttributeFromShortHand(bufferLayouts, name2);
2489
+ if (bufferLayoutInfo) {
2490
+ return bufferLayoutInfo;
2491
+ }
2492
+ bufferLayoutInfo = getAttributeFromAttributesList(bufferLayouts, name2);
2493
+ if (bufferLayoutInfo) {
2494
+ return bufferLayoutInfo;
2495
+ }
2496
+ log.warn(`layout for attribute "${name2}" not present in buffer layout`);
2497
+ return null;
2498
+ }
2499
+ function checkBufferLayouts(bufferLayouts) {
2500
+ for (const bufferLayout of bufferLayouts) {
2501
+ if (bufferLayout.attributes && bufferLayout.format || !bufferLayout.attributes && !bufferLayout.format) {
2502
+ log.warn(`BufferLayout ${name} must have either 'attributes' or 'format' field`);
2503
+ }
2504
+ }
2505
+ }
2506
+ function getAttributeFromShortHand(bufferLayouts, name2) {
2507
+ for (const bufferLayout of bufferLayouts) {
2508
+ if (bufferLayout.format && bufferLayout.name === name2) {
2487
2509
  return {
2488
- name: bufferMapping.name,
2510
+ attributeName: bufferLayout.name,
2489
2511
  bufferName: name2,
2490
- vertexFormat: bufferMapping.format,
2491
- byteOffset: bufferMapping.byteOffset || 0,
2492
- byteStride: bufferMapping.byteStride || 0
2512
+ stepMode: bufferLayout.stepMode,
2513
+ vertexFormat: bufferLayout.format,
2514
+ // If offset is needed, use `attributes` field.
2515
+ byteOffset: 0,
2516
+ byteStride: bufferLayout.byteStride || 0
2493
2517
  };
2494
2518
  }
2495
- let nextByteOffset = bufferMapping.byteOffset || 0;
2496
- let byteStride = 0;
2497
- for (const interleavedMapping of bufferMapping.attributes || []) {
2498
- const info = decodeVertexFormat(interleavedMapping.format);
2499
- byteStride += info.byteLength;
2500
- }
2501
- for (const interleavedMapping of bufferMapping.attributes || []) {
2502
- const byteOffset = nextByteOffset;
2503
- nextByteOffset += interleavedMapping?.byteStrideOffset || decodeVertexFormat(interleavedMapping.format).byteLength;
2504
- if (interleavedMapping.name === name2) {
2505
- return {
2506
- name: bufferMapping.name,
2507
- bufferName: name2,
2508
- vertexFormat: interleavedMapping.format,
2509
- byteOffset,
2510
- byteStride: bufferMapping.byteStride || byteStride
2511
- };
2519
+ }
2520
+ return null;
2521
+ }
2522
+ function getAttributeFromAttributesList(bufferLayouts, name2) {
2523
+ for (const bufferLayout of bufferLayouts) {
2524
+ let byteStride = bufferLayout.byteStride;
2525
+ if (typeof bufferLayout.byteStride !== "number") {
2526
+ for (const attributeMapping2 of bufferLayout.attributes || []) {
2527
+ const info = decodeVertexFormat(attributeMapping2.format);
2528
+ byteStride += info.byteLength;
2512
2529
  }
2513
2530
  }
2531
+ const attributeMapping = bufferLayout.attributes?.find((mapping) => mapping.attribute === name2);
2532
+ if (attributeMapping) {
2533
+ return {
2534
+ attributeName: attributeMapping.attribute,
2535
+ bufferName: bufferLayout.name,
2536
+ stepMode: bufferLayout.stepMode,
2537
+ vertexFormat: attributeMapping.format,
2538
+ byteOffset: attributeMapping.byteOffset,
2539
+ byteStride
2540
+ };
2541
+ }
2514
2542
  }
2515
- log.warn(`layout for attribute "${name2}" not present in buffer layout`);
2516
2543
  return null;
2517
2544
  }
2518
2545
  function mergeShaderLayout(baseLayout, overrideLayout) {
@@ -3888,6 +3915,40 @@ ${isVertex ? "" : FRAGMENT_SHADER_PROLOGUE}
3888
3915
  return result;
3889
3916
  }
3890
3917
 
3918
+ // ../shadertools/src/lib/shader-assembly/select-shaders.ts
3919
+ function selectShaders(platformInfo, props) {
3920
+ if (!props.vs) {
3921
+ throw new Error("no vertex shader");
3922
+ }
3923
+ const vs = getShaderSource(platformInfo, props.vs);
3924
+ let fs;
3925
+ if (props.fs) {
3926
+ fs = getShaderSource(platformInfo, props.fs);
3927
+ }
3928
+ return {
3929
+ ...props,
3930
+ vs,
3931
+ fs
3932
+ };
3933
+ }
3934
+ function getShaderSource(platformInfo, shader) {
3935
+ if (typeof shader === "string") {
3936
+ return shader;
3937
+ }
3938
+ switch (platformInfo.type) {
3939
+ case "webgpu":
3940
+ if (shader?.wgsl) {
3941
+ return shader.wgsl;
3942
+ }
3943
+ throw new Error("WebGPU does not support GLSL shaders");
3944
+ default:
3945
+ if (shader?.glsl) {
3946
+ return shader.glsl;
3947
+ }
3948
+ throw new Error("WebGL does not support WGSL shaders");
3949
+ }
3950
+ }
3951
+
3891
3952
  // ../shadertools/src/lib/shader-assembler.ts
3892
3953
  var ShaderAssembler = class {
3893
3954
  /** Default ShaderAssembler instance */
@@ -3940,8 +4001,9 @@ ${isVertex ? "" : FRAGMENT_SHADER_PROLOGUE}
3940
4001
  assembleShaders(platformInfo, props) {
3941
4002
  const modules = this._getModuleList(props.modules);
3942
4003
  const hookFunctions = this._hookFunctions;
4004
+ const options = selectShaders(platformInfo, props);
3943
4005
  const assembled = assembleShaders(platformInfo, {
3944
- ...props,
4006
+ ...options,
3945
4007
  modules,
3946
4008
  hookFunctions
3947
4009
  });
@@ -5954,32 +6016,8 @@ void main() {
5954
6016
  this.topology = props.topology;
5955
6017
  this.indices = props.indices || null;
5956
6018
  this.attributes = props.attributes;
5957
- this.vertexCount = props.vertexCount || this._calculateVertexCount(this.attributes.positions);
6019
+ this.vertexCount = props.vertexCount;
5958
6020
  this.bufferLayout = props.bufferLayout || [];
5959
- if (!this.bufferLayout.find((layout) => layout.name === "positions")) {
5960
- this.bufferLayout.push({
5961
- name: "positions",
5962
- format: "float32x3"
5963
- });
5964
- }
5965
- if (!this.bufferLayout.find((layout) => layout.name === "normals")) {
5966
- this.bufferLayout.push({
5967
- name: "normals",
5968
- format: "float32x3"
5969
- });
5970
- }
5971
- if (!this.bufferLayout.find((layout) => layout.name === "texCoords")) {
5972
- this.bufferLayout.push({
5973
- name: "texCoords",
5974
- format: "float32x2"
5975
- });
5976
- }
5977
- if (!this.bufferLayout.find((layout) => layout.name === "colors")) {
5978
- this.bufferLayout.push({
5979
- name: "colors",
5980
- format: "float32x3"
5981
- });
5982
- }
5983
6021
  if (this.indices) {
5984
6022
  assert2(this.indices.usage === Buffer2.INDEX);
5985
6023
  }
@@ -6010,9 +6048,13 @@ void main() {
6010
6048
  return geometry;
6011
6049
  }
6012
6050
  const indices = getIndexBufferFromGeometry(device, geometry);
6013
- const attributes = getAttributeBuffersFromGeometry(device, geometry);
6051
+ const {
6052
+ attributes,
6053
+ bufferLayout
6054
+ } = getAttributeBuffersFromGeometry(device, geometry);
6014
6055
  return new GPUGeometry({
6015
- topology: geometry.topology,
6056
+ topology: geometry.topology || "triangle-list",
6057
+ bufferLayout,
6016
6058
  vertexCount: geometry.vertexCount,
6017
6059
  indices,
6018
6060
  attributes
@@ -6022,32 +6064,43 @@ void main() {
6022
6064
  if (!geometry.indices) {
6023
6065
  return void 0;
6024
6066
  }
6025
- const data = geometry.indices.value || geometry.indices;
6026
- assert2(data instanceof Uint16Array || data instanceof Uint32Array, 'attribute array for "indices" must be of integer type');
6067
+ const data = geometry.indices.value;
6027
6068
  return device.createBuffer({
6028
6069
  usage: Buffer2.INDEX,
6029
6070
  data
6030
6071
  });
6031
6072
  }
6032
6073
  function getAttributeBuffersFromGeometry(device, geometry) {
6033
- const positions = geometry.attributes.positions || geometry.attributes.POSITION;
6034
- const normals = geometry.attributes.normals || geometry.attributes.NORMAL;
6035
- const texCoords = geometry.attributes.texCoords || geometry.attributes.TEXCOORD_0;
6036
- const buffers = {
6037
- positions: device.createBuffer({
6038
- data: positions.value,
6039
- id: "positions-buffer"
6040
- }),
6041
- normals: device.createBuffer({
6042
- data: normals.value,
6043
- id: "normals-buffer"
6044
- }),
6045
- texCoords: device.createBuffer({
6046
- data: texCoords.value,
6047
- id: "texCoords-buffer"
6048
- })
6074
+ const bufferLayout = [];
6075
+ const attributes = {};
6076
+ for (const [attributeName, attribute] of Object.entries(geometry.attributes)) {
6077
+ let name2 = attributeName;
6078
+ switch (attributeName) {
6079
+ case "POSITION":
6080
+ name2 = "positions";
6081
+ break;
6082
+ case "NORMAL":
6083
+ name2 = "normals";
6084
+ break;
6085
+ case "TEXCOORD_0":
6086
+ name2 = "texCoords";
6087
+ break;
6088
+ }
6089
+ attributes[name2] = device.createBuffer({
6090
+ data: attribute.value,
6091
+ id: `${attributeName}-buffer`
6092
+ });
6093
+ bufferLayout.push({
6094
+ name: name2,
6095
+ format: `float32x${attribute.size}`
6096
+ });
6097
+ }
6098
+ const vertexCount = geometry._calculateVertexCount(geometry.attributes, geometry.indices);
6099
+ return {
6100
+ attributes,
6101
+ bufferLayout,
6102
+ vertexCount
6049
6103
  };
6050
- return buffers;
6051
6104
  }
6052
6105
 
6053
6106
  // src/lib/pipeline-factory.ts
@@ -6121,10 +6174,15 @@ void main() {
6121
6174
  _hashRenderPipeline(props) {
6122
6175
  const vsHash = this._getHash(props.vs);
6123
6176
  const fsHash = props.fs ? this._getHash(props.fs) : 0;
6124
- const parameterHash = this._getHash(JSON.stringify(props.parameters));
6125
- const bufferLayoutHash = this._getHash(JSON.stringify(props.bufferLayout));
6126
6177
  const varyingHash = "-";
6127
- return `${vsHash}/${fsHash}V${varyingHash}T${props.topology}P${parameterHash}BL${bufferLayoutHash}}`;
6178
+ switch (this.device.info.type) {
6179
+ case "webgpu":
6180
+ const parameterHash = this._getHash(JSON.stringify(props.parameters));
6181
+ const bufferLayoutHash = this._getHash(JSON.stringify(props.bufferLayout));
6182
+ return `${vsHash}/${fsHash}V${varyingHash}T${props.topology}P${parameterHash}BL${bufferLayoutHash}}`;
6183
+ default:
6184
+ return `${vsHash}/${fsHash}V${varyingHash}`;
6185
+ }
6128
6186
  }
6129
6187
  _getHash(key) {
6130
6188
  if (this._hashes[key] === void 0) {
@@ -6140,45 +6198,6 @@ void main() {
6140
6198
  fs: void 0
6141
6199
  });
6142
6200
 
6143
- // src/model/model-shaders.ts
6144
- function buildShaders(device, props) {
6145
- if (!props.vs) {
6146
- throw new Error("no vertex shader");
6147
- }
6148
- const vs = getShaderSource(device, props.vs);
6149
- let fs;
6150
- if (props.fs) {
6151
- fs = getShaderSource(device, props.fs);
6152
- }
6153
- const platformInfo = {
6154
- type: device.info.type,
6155
- gpu: device.info.gpu,
6156
- features: device.features
6157
- };
6158
- return props.shaderAssembler.assembleShaders(platformInfo, {
6159
- ...props,
6160
- fs,
6161
- vs
6162
- });
6163
- }
6164
- function getShaderSource(device, shader) {
6165
- if (typeof shader === "string") {
6166
- return shader;
6167
- }
6168
- switch (device.info.type) {
6169
- case "webgpu":
6170
- if (shader?.wgsl) {
6171
- return shader.wgsl;
6172
- }
6173
- throw new Error("WebGPU does not support GLSL shaders");
6174
- default:
6175
- if (shader?.glsl) {
6176
- return shader.glsl;
6177
- }
6178
- throw new Error("WebGL does not support WGSL shaders");
6179
- }
6180
- }
6181
-
6182
6201
  // src/model/model.ts
6183
6202
  var _Model = class {
6184
6203
  userData = {};
@@ -6211,11 +6230,17 @@ void main() {
6211
6230
  this.id = props.id || uid("model");
6212
6231
  this.device = device;
6213
6232
  Object.assign(this.userData, props.userData);
6233
+ const platformInfo = {
6234
+ type: device.info.type,
6235
+ shaderLanguage: device.info.shadingLanguages[0],
6236
+ gpu: device.info.gpu,
6237
+ features: device.features
6238
+ };
6214
6239
  const {
6215
6240
  vs,
6216
6241
  fs,
6217
6242
  getUniforms
6218
- } = buildShaders(device, this.props);
6243
+ } = this.props.shaderAssembler.assembleShaders(platformInfo, this.props);
6219
6244
  this.vs = vs;
6220
6245
  this.fs = fs;
6221
6246
  this._getModuleUniforms = getUniforms;
@@ -6224,9 +6249,8 @@ void main() {
6224
6249
  this.topology = this.props.topology;
6225
6250
  this.bufferLayout = this.props.bufferLayout;
6226
6251
  this.parameters = this.props.parameters;
6227
- const gpuGeometry = props.geometry && makeGPUGeometry(device, props.geometry);
6228
- if (gpuGeometry) {
6229
- this.setGeometry(gpuGeometry);
6252
+ if (props.geometry) {
6253
+ this.setGeometry(props.geometry);
6230
6254
  }
6231
6255
  this.pipelineFactory = props.pipelineFactory || PipelineFactory.getDefaultPipelineFactory(this.device);
6232
6256
  this.pipeline = this._updatePipeline();
@@ -6274,14 +6298,16 @@ void main() {
6274
6298
  // Update fixed fields (can trigger pipeline rebuild)
6275
6299
  /**
6276
6300
  * Updates the optional geometry
6301
+ * Geometry, sets several attributes, indices, and also vertex count and topology
6277
6302
  * @note Can trigger a pipeline rebuild / pipeline cache fetch on WebGPU
6278
6303
  */
6279
6304
  setGeometry(geometry) {
6280
- this.setTopology(geometry.topology || "triangle-list");
6281
- this.bufferLayout = mergeBufferLayouts(this.bufferLayout, geometry.bufferLayout);
6282
- this.vertexCount = geometry.vertexCount;
6283
- this.setAttributes(geometry.attributes);
6284
- this.setIndexBuffer(geometry.indices);
6305
+ const gpuGeometry = geometry && makeGPUGeometry(this.device, geometry);
6306
+ this.setTopology(gpuGeometry.topology || "triangle-list");
6307
+ this.bufferLayout = mergeBufferLayouts(this.bufferLayout, gpuGeometry.bufferLayout);
6308
+ this.vertexCount = gpuGeometry.vertexCount;
6309
+ this.setAttributes(gpuGeometry.attributes);
6310
+ this.setIndexBuffer(gpuGeometry.indices);
6285
6311
  }
6286
6312
  /**
6287
6313
  * Updates the primitive topology ('triangle-list', 'triangle-strip' etc).
@@ -6290,9 +6316,7 @@ void main() {
6290
6316
  setTopology(topology) {
6291
6317
  if (topology !== this.topology) {
6292
6318
  this.topology = topology;
6293
- if (this.device.info.type === "webgpu") {
6294
- this._setPipelineNeedsUpdate("topology");
6295
- }
6319
+ this._setPipelineNeedsUpdate("topology");
6296
6320
  }
6297
6321
  }
6298
6322
  /**
@@ -6302,9 +6326,7 @@ void main() {
6302
6326
  setBufferLayout(bufferLayout) {
6303
6327
  if (bufferLayout !== this.bufferLayout) {
6304
6328
  this.bufferLayout = bufferLayout;
6305
- if (this.device.info.type === "webgpu") {
6306
- this._setPipelineNeedsUpdate("bufferLayout");
6307
- }
6329
+ this._setPipelineNeedsUpdate("bufferLayout");
6308
6330
  }
6309
6331
  }
6310
6332
  /**
@@ -6315,9 +6337,7 @@ void main() {
6315
6337
  setParameters(parameters) {
6316
6338
  if (!deepEqual(parameters, this.parameters, 2)) {
6317
6339
  this.parameters = parameters;
6318
- if (this.device.info.type === "webgpu") {
6319
- this._setPipelineNeedsUpdate("parameters");
6320
- }
6340
+ this._setPipelineNeedsUpdate("parameters");
6321
6341
  }
6322
6342
  }
6323
6343
  // Update dynamic fields
@@ -13084,8 +13104,8 @@ ${formattedLog}`)();
13084
13104
  }
13085
13105
  const webglBuffer = cast(buffer);
13086
13106
  const glType = getGLFromVertexType(attributeInfo.bufferDataType);
13087
- log.log(1, {
13088
- setAttribute: attributeInfo.name,
13107
+ log.log(2, {
13108
+ setAttribute: attributeInfo.attributeName,
13089
13109
  toBuffer: bufferName,
13090
13110
  size: attributeInfo.bufferComponents,
13091
13111
  type: glType,
@@ -14079,7 +14099,10 @@ ${formattedLog}`)();
14079
14099
  getVertexCount() {
14080
14100
  return this.vertexCount;
14081
14101
  }
14082
- // Return an object with all attributes plus indices added as a field.
14102
+ /**
14103
+ * Return an object with all attributes plus indices added as a field.
14104
+ * TODO Geometry types are a mess
14105
+ */
14083
14106
  getAttributes() {
14084
14107
  return this.indices ? {
14085
14108
  indices: this.indices,
@@ -14090,11 +14113,17 @@ ${formattedLog}`)();
14090
14113
  _print(attributeName) {
14091
14114
  return `Geometry ${this.id} attribute ${attributeName}`;
14092
14115
  }
14093
- // GeometryAttribute
14094
- // value: typed array
14095
- // type: indices, vertices, uvs
14096
- // size: elements per vertex
14097
- // target: WebGL buffer type (string or constant)
14116
+ /**
14117
+ * GeometryAttribute
14118
+ * value: typed array
14119
+ * type: indices, vertices, uvs
14120
+ * size: elements per vertex
14121
+ * target: WebGL buffer type (string or constant)
14122
+ *
14123
+ * @param attributes
14124
+ * @param indices
14125
+ * @returns
14126
+ */
14098
14127
  _setAttributes(attributes, indices) {
14099
14128
  return this;
14100
14129
  }
@@ -14103,8 +14132,7 @@ ${formattedLog}`)();
14103
14132
  return indices.value.length;
14104
14133
  }
14105
14134
  let vertexCount = Infinity;
14106
- for (const attributeName in attributes) {
14107
- const attribute = attributes[attributeName];
14135
+ for (const attribute of Object.values(attributes)) {
14108
14136
  const {
14109
14137
  value,
14110
14138
  size,
@@ -42,7 +42,7 @@ function tesselateIcosaHedron(props) {
42
42
  i2 *= 3;
43
43
  const mini = i1 < i2 ? i1 : i2;
44
44
  const maxi = i1 > i2 ? i1 : i2;
45
- const key = "".concat(mini, "|").concat(maxi);
45
+ const key = `${mini}|${maxi}`;
46
46
  if (key in pointMemo) {
47
47
  return pointMemo[key];
48
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ico-sphere-geometry.js","names":["uid","Vector3","Geometry","ICO_POSITIONS","ICO_INDICES","IcoSphereGeometry","constructor","props","arguments","length","undefined","id","indices","attributes","tesselateIcosaHedron","topology","iterations","PI","Math","PI2","positions","push","getMiddlePoint","pointMemo","i1","i2","mini","maxi","key","concat","x1","y1","z1","x2","y2","z2","xm","ym","zm","len","sqrt","i","indices2","j","a","b","c","normals","Array","texCoords","l","i3","in1","in2","in3","iu1","iu2","iu3","theta1","acos","phi1","atan2","v1","u1","theta2","phi2","v2","u2","x3","y3","z3","theta3","phi3","v3","u3","vec1","vec2","normal","cross","normalize","newIndex","x","y","z","size","value","Uint16Array","POSITION","Float32Array","NORMAL","TEXCOORD_0"],"sources":["../../src/geometries/ico-sphere-geometry.ts"],"sourcesContent":["import {uid} from '@luma.gl/core';\nimport {Vector3} from '@math.gl/core';\nimport {Geometry} from '../geometry/geometry';\n\n/* eslint-disable comma-spacing, max-statements, complexity */\n\nconst ICO_POSITIONS = [-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 1, 0, 0];\nconst ICO_INDICES = [3, 4, 5, 3, 5, 1, 3, 1, 0, 3, 0, 4, 4, 0, 2, 4, 2, 5, 2, 0, 1, 5, 2, 1];\n\nexport type IcoSphereGeometryProps = {\n id?: string;\n radius?: number;\n iterations?: number;\n attributes?: any\n};\n\nexport class IcoSphereGeometry extends Geometry {\n constructor(props: IcoSphereGeometryProps = {}) {\n const {id = uid('ico-sphere-geometry')} = props;\n const {indices, attributes} = tesselateIcosaHedron(props);\n super({\n ...props,\n id,\n topology: 'triangle-list',\n indices,\n attributes: {...attributes, ...props.attributes}\n });\n }\n}\n\nfunction tesselateIcosaHedron(props: IcoSphereGeometryProps) {\n const {iterations = 0} = props;\n\n const PI = Math.PI;\n const PI2 = PI * 2;\n\n const positions = [...ICO_POSITIONS];\n let indices = [...ICO_INDICES];\n\n positions.push();\n indices.push();\n\n const getMiddlePoint = (() => {\n const pointMemo: Record<string, number> = {};\n\n return (i1: number, i2: number) => {\n i1 *= 3;\n i2 *= 3;\n const mini = i1 < i2 ? i1 : i2;\n const maxi = i1 > i2 ? i1 : i2;\n const key = `${mini}|${maxi}`;\n\n if (key in pointMemo) {\n return pointMemo[key];\n }\n\n const x1 = positions[i1];\n const y1 = positions[i1 + 1];\n const z1 = positions[i1 + 2];\n const x2 = positions[i2];\n const y2 = positions[i2 + 1];\n const z2 = positions[i2 + 2];\n let xm = (x1 + x2) / 2;\n let ym = (y1 + y2) / 2;\n let zm = (z1 + z2) / 2;\n const len = Math.sqrt(xm * xm + ym * ym + zm * zm);\n\n xm /= len;\n ym /= len;\n zm /= len;\n\n positions.push(xm, ym, zm);\n\n return (pointMemo[key] = positions.length / 3 - 1);\n };\n })();\n\n for (let i = 0; i < iterations; i++) {\n const indices2: number[] = [];\n for (let j = 0; j < indices.length; j += 3) {\n const a = getMiddlePoint(indices[j + 0], indices[j + 1]);\n const b = getMiddlePoint(indices[j + 1], indices[j + 2]);\n const c = getMiddlePoint(indices[j + 2], indices[j + 0]);\n\n indices2.push(c, indices[j + 0], a, a, indices[j + 1], b, b, indices[j + 2], c, a, b, c);\n }\n indices = indices2;\n }\n\n // Calculate texCoords and normals\n const normals = new Array(positions.length);\n const texCoords = new Array((positions.length / 3) * 2);\n\n const l = indices.length;\n for (let i = l - 3; i >= 0; i -= 3) {\n const i1 = indices[i + 0];\n const i2 = indices[i + 1];\n const i3 = indices[i + 2];\n const in1 = i1 * 3;\n const in2 = i2 * 3;\n const in3 = i3 * 3;\n const iu1 = i1 * 2;\n const iu2 = i2 * 2;\n const iu3 = i3 * 2;\n const x1 = positions[in1 + 0];\n const y1 = positions[in1 + 1];\n const z1 = positions[in1 + 2];\n const theta1 = Math.acos(z1 / Math.sqrt(x1 * x1 + y1 * y1 + z1 * z1));\n const phi1 = Math.atan2(y1, x1) + PI;\n const v1 = theta1 / PI;\n const u1 = 1 - phi1 / PI2;\n const x2 = positions[in2 + 0];\n const y2 = positions[in2 + 1];\n const z2 = positions[in2 + 2];\n const theta2 = Math.acos(z2 / Math.sqrt(x2 * x2 + y2 * y2 + z2 * z2));\n const phi2 = Math.atan2(y2, x2) + PI;\n const v2 = theta2 / PI;\n const u2 = 1 - phi2 / PI2;\n const x3 = positions[in3 + 0];\n const y3 = positions[in3 + 1];\n const z3 = positions[in3 + 2];\n const theta3 = Math.acos(z3 / Math.sqrt(x3 * x3 + y3 * y3 + z3 * z3));\n const phi3 = Math.atan2(y3, x3) + PI;\n const v3 = theta3 / PI;\n const u3 = 1 - phi3 / PI2;\n const vec1 = [x3 - x2, y3 - y2, z3 - z2];\n const vec2 = [x1 - x2, y1 - y2, z1 - z2];\n const normal = new Vector3(vec1).cross(vec2).normalize();\n let newIndex;\n\n if (\n (u1 === 0 || u2 === 0 || u3 === 0) &&\n (u1 === 0 || u1 > 0.5) &&\n (u2 === 0 || u2 > 0.5) &&\n (u3 === 0 || u3 > 0.5)\n ) {\n positions.push(positions[in1 + 0], positions[in1 + 1], positions[in1 + 2]);\n newIndex = positions.length / 3 - 1;\n indices.push(newIndex);\n texCoords[newIndex * 2 + 0] = 1;\n texCoords[newIndex * 2 + 1] = v1;\n normals[newIndex * 3 + 0] = normal.x;\n normals[newIndex * 3 + 1] = normal.y;\n normals[newIndex * 3 + 2] = normal.z;\n\n positions.push(positions[in2 + 0], positions[in2 + 1], positions[in2 + 2]);\n newIndex = positions.length / 3 - 1;\n indices.push(newIndex);\n texCoords[newIndex * 2 + 0] = 1;\n texCoords[newIndex * 2 + 1] = v2;\n normals[newIndex * 3 + 0] = normal.x;\n normals[newIndex * 3 + 1] = normal.y;\n normals[newIndex * 3 + 2] = normal.z;\n\n positions.push(positions[in3 + 0], positions[in3 + 1], positions[in3 + 2]);\n newIndex = positions.length / 3 - 1;\n indices.push(newIndex);\n texCoords[newIndex * 2 + 0] = 1;\n texCoords[newIndex * 2 + 1] = v3;\n normals[newIndex * 3 + 0] = normal.x;\n normals[newIndex * 3 + 1] = normal.y;\n normals[newIndex * 3 + 2] = normal.z;\n }\n\n normals[in1 + 0] = normals[in2 + 0] = normals[in3 + 0] = normal.x;\n normals[in1 + 1] = normals[in2 + 1] = normals[in3 + 1] = normal.y;\n normals[in1 + 2] = normals[in2 + 2] = normals[in3 + 2] = normal.z;\n\n texCoords[iu1 + 0] = u1;\n texCoords[iu1 + 1] = v1;\n\n texCoords[iu2 + 0] = u2;\n texCoords[iu2 + 1] = v2;\n\n texCoords[iu3 + 0] = u3;\n texCoords[iu3 + 1] = v3;\n }\n\n return {\n indices: {size: 1, value: new Uint16Array(indices)},\n attributes: {\n POSITION: {size: 3, value: new Float32Array(positions)},\n NORMAL: {size: 3, value: new Float32Array(normals)},\n TEXCOORD_0: {size: 2, value: new Float32Array(texCoords)}\n }\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ico-sphere-geometry.js","names":["uid","Vector3","Geometry","ICO_POSITIONS","ICO_INDICES","IcoSphereGeometry","constructor","props","arguments","length","undefined","id","indices","attributes","tesselateIcosaHedron","topology","iterations","PI","Math","PI2","positions","push","getMiddlePoint","pointMemo","i1","i2","mini","maxi","key","x1","y1","z1","x2","y2","z2","xm","ym","zm","len","sqrt","i","indices2","j","a","b","c","normals","Array","texCoords","l","i3","in1","in2","in3","iu1","iu2","iu3","theta1","acos","phi1","atan2","v1","u1","theta2","phi2","v2","u2","x3","y3","z3","theta3","phi3","v3","u3","vec1","vec2","normal","cross","normalize","newIndex","x","y","z","size","value","Uint16Array","POSITION","Float32Array","NORMAL","TEXCOORD_0"],"sources":["../../src/geometries/ico-sphere-geometry.ts"],"sourcesContent":["import {uid} from '@luma.gl/core';\nimport {Vector3} from '@math.gl/core';\nimport {Geometry} from '../geometry/geometry';\n\n/* eslint-disable comma-spacing, max-statements, complexity */\n\nconst ICO_POSITIONS = [-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 1, 0, 0];\nconst ICO_INDICES = [3, 4, 5, 3, 5, 1, 3, 1, 0, 3, 0, 4, 4, 0, 2, 4, 2, 5, 2, 0, 1, 5, 2, 1];\n\nexport type IcoSphereGeometryProps = {\n id?: string;\n radius?: number;\n iterations?: number;\n attributes?: any\n};\n\nexport class IcoSphereGeometry extends Geometry {\n constructor(props: IcoSphereGeometryProps = {}) {\n const {id = uid('ico-sphere-geometry')} = props;\n const {indices, attributes} = tesselateIcosaHedron(props);\n super({\n ...props,\n id,\n topology: 'triangle-list',\n indices,\n attributes: {...attributes, ...props.attributes}\n });\n }\n}\n\nfunction tesselateIcosaHedron(props: IcoSphereGeometryProps) {\n const {iterations = 0} = props;\n\n const PI = Math.PI;\n const PI2 = PI * 2;\n\n const positions = [...ICO_POSITIONS];\n let indices = [...ICO_INDICES];\n\n positions.push();\n indices.push();\n\n const getMiddlePoint = (() => {\n const pointMemo: Record<string, number> = {};\n\n return (i1: number, i2: number) => {\n i1 *= 3;\n i2 *= 3;\n const mini = i1 < i2 ? i1 : i2;\n const maxi = i1 > i2 ? i1 : i2;\n const key = `${mini}|${maxi}`;\n\n if (key in pointMemo) {\n return pointMemo[key];\n }\n\n const x1 = positions[i1];\n const y1 = positions[i1 + 1];\n const z1 = positions[i1 + 2];\n const x2 = positions[i2];\n const y2 = positions[i2 + 1];\n const z2 = positions[i2 + 2];\n let xm = (x1 + x2) / 2;\n let ym = (y1 + y2) / 2;\n let zm = (z1 + z2) / 2;\n const len = Math.sqrt(xm * xm + ym * ym + zm * zm);\n\n xm /= len;\n ym /= len;\n zm /= len;\n\n positions.push(xm, ym, zm);\n\n return (pointMemo[key] = positions.length / 3 - 1);\n };\n })();\n\n for (let i = 0; i < iterations; i++) {\n const indices2: number[] = [];\n for (let j = 0; j < indices.length; j += 3) {\n const a = getMiddlePoint(indices[j + 0], indices[j + 1]);\n const b = getMiddlePoint(indices[j + 1], indices[j + 2]);\n const c = getMiddlePoint(indices[j + 2], indices[j + 0]);\n\n indices2.push(c, indices[j + 0], a, a, indices[j + 1], b, b, indices[j + 2], c, a, b, c);\n }\n indices = indices2;\n }\n\n // Calculate texCoords and normals\n const normals = new Array(positions.length);\n const texCoords = new Array((positions.length / 3) * 2);\n\n const l = indices.length;\n for (let i = l - 3; i >= 0; i -= 3) {\n const i1 = indices[i + 0];\n const i2 = indices[i + 1];\n const i3 = indices[i + 2];\n const in1 = i1 * 3;\n const in2 = i2 * 3;\n const in3 = i3 * 3;\n const iu1 = i1 * 2;\n const iu2 = i2 * 2;\n const iu3 = i3 * 2;\n const x1 = positions[in1 + 0];\n const y1 = positions[in1 + 1];\n const z1 = positions[in1 + 2];\n const theta1 = Math.acos(z1 / Math.sqrt(x1 * x1 + y1 * y1 + z1 * z1));\n const phi1 = Math.atan2(y1, x1) + PI;\n const v1 = theta1 / PI;\n const u1 = 1 - phi1 / PI2;\n const x2 = positions[in2 + 0];\n const y2 = positions[in2 + 1];\n const z2 = positions[in2 + 2];\n const theta2 = Math.acos(z2 / Math.sqrt(x2 * x2 + y2 * y2 + z2 * z2));\n const phi2 = Math.atan2(y2, x2) + PI;\n const v2 = theta2 / PI;\n const u2 = 1 - phi2 / PI2;\n const x3 = positions[in3 + 0];\n const y3 = positions[in3 + 1];\n const z3 = positions[in3 + 2];\n const theta3 = Math.acos(z3 / Math.sqrt(x3 * x3 + y3 * y3 + z3 * z3));\n const phi3 = Math.atan2(y3, x3) + PI;\n const v3 = theta3 / PI;\n const u3 = 1 - phi3 / PI2;\n const vec1 = [x3 - x2, y3 - y2, z3 - z2];\n const vec2 = [x1 - x2, y1 - y2, z1 - z2];\n const normal = new Vector3(vec1).cross(vec2).normalize();\n let newIndex;\n\n if (\n (u1 === 0 || u2 === 0 || u3 === 0) &&\n (u1 === 0 || u1 > 0.5) &&\n (u2 === 0 || u2 > 0.5) &&\n (u3 === 0 || u3 > 0.5)\n ) {\n positions.push(positions[in1 + 0], positions[in1 + 1], positions[in1 + 2]);\n newIndex = positions.length / 3 - 1;\n indices.push(newIndex);\n texCoords[newIndex * 2 + 0] = 1;\n texCoords[newIndex * 2 + 1] = v1;\n normals[newIndex * 3 + 0] = normal.x;\n normals[newIndex * 3 + 1] = normal.y;\n normals[newIndex * 3 + 2] = normal.z;\n\n positions.push(positions[in2 + 0], positions[in2 + 1], positions[in2 + 2]);\n newIndex = positions.length / 3 - 1;\n indices.push(newIndex);\n texCoords[newIndex * 2 + 0] = 1;\n texCoords[newIndex * 2 + 1] = v2;\n normals[newIndex * 3 + 0] = normal.x;\n normals[newIndex * 3 + 1] = normal.y;\n normals[newIndex * 3 + 2] = normal.z;\n\n positions.push(positions[in3 + 0], positions[in3 + 1], positions[in3 + 2]);\n newIndex = positions.length / 3 - 1;\n indices.push(newIndex);\n texCoords[newIndex * 2 + 0] = 1;\n texCoords[newIndex * 2 + 1] = v3;\n normals[newIndex * 3 + 0] = normal.x;\n normals[newIndex * 3 + 1] = normal.y;\n normals[newIndex * 3 + 2] = normal.z;\n }\n\n normals[in1 + 0] = normals[in2 + 0] = normals[in3 + 0] = normal.x;\n normals[in1 + 1] = normals[in2 + 1] = normals[in3 + 1] = normal.y;\n normals[in1 + 2] = normals[in2 + 2] = normals[in3 + 2] = normal.z;\n\n texCoords[iu1 + 0] = u1;\n texCoords[iu1 + 1] = v1;\n\n texCoords[iu2 + 0] = u2;\n texCoords[iu2 + 1] = v2;\n\n texCoords[iu3 + 0] = u3;\n texCoords[iu3 + 1] = v3;\n }\n\n return {\n indices: {size: 1, value: new Uint16Array(indices)},\n attributes: {\n POSITION: {size: 3, value: new Float32Array(positions)},\n NORMAL: {size: 3, value: new Float32Array(normals)},\n TEXCOORD_0: {size: 2, value: new Float32Array(texCoords)}\n }\n };\n}\n"],"mappings":"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"}
@@ -31,10 +31,10 @@ function tesselatePlane(props) {
31
31
  unpack = false
32
32
  } = props;
33
33
  const coords = type.split(',');
34
- let c1len = props["".concat(coords[0], "len")] || 1;
35
- const c2len = props["".concat(coords[1], "len")] || 1;
36
- const subdivisions1 = props["n".concat(coords[0])] || 1;
37
- const subdivisions2 = props["n".concat(coords[1])] || 1;
34
+ let c1len = props[`${coords[0]}len`] || 1;
35
+ const c2len = props[`${coords[1]}len`] || 1;
36
+ const subdivisions1 = props[`n${coords[0]}`] || 1;
37
+ const subdivisions2 = props[`n${coords[1]}`] || 1;
38
38
  const numVertices = (subdivisions1 + 1) * (subdivisions2 + 1);
39
39
  const positions = new Float32Array(numVertices * 3);
40
40
  const normals = new Float32Array(numVertices * 3);
@@ -1 +1 @@
1
- {"version":3,"file":"plane-geometry.js","names":["uid","Geometry","unpackIndexedGeometry","PlaneGeometry","constructor","props","arguments","length","undefined","id","indices","attributes","tesselatePlane","topology","type","offset","flipCull","unpack","coords","split","c1len","concat","c2len","subdivisions1","subdivisions2","numVertices","positions","Float32Array","normals","texCoords","i2","i3","z","x","u","v","Error","numVertsAcross","Uint16Array","index","geometry","size","value","POSITION","NORMAL","TEXCOORD_0"],"sources":["../../src/geometries/plane-geometry.ts"],"sourcesContent":["import {uid} from '@luma.gl/core';\nimport {Geometry} from '../geometry/geometry';\nimport {unpackIndexedGeometry} from '../geometry/geometry-utils';\n\nexport type PlaneGeometryProps = {\n id?: string;\n radius?: number;\n attributes?: any\n};\n\n// Primitives inspired by TDL http://code.google.com/p/webglsamples/,\n// copyright 2011 Google Inc. new BSD License\n// (http://www.opensource.org/licenses/bsd-license.php).\nexport class PlaneGeometry extends Geometry {\n constructor(props: PlaneGeometryProps = {}) {\n const {id = uid('plane-geometry')} = props;\n\n const {indices, attributes} = tesselatePlane(props);\n super({\n ...props,\n id,\n topology: 'triangle-list',\n indices,\n attributes: {...attributes, ...props.attributes}\n });\n }\n}\n\n/* eslint-disable complexity, max-statements */\nfunction tesselatePlane(props: any) {\n const {type = 'x,y', offset = 0, flipCull = false, unpack = false} = props;\n\n const coords = type.split(',');\n // width, height\n let c1len = props[`${coords[0]}len`] || 1;\n const c2len = props[`${coords[1]}len`] || 1;\n // subdivisionsWidth, subdivisionsDepth\n const subdivisions1 = props[`n${coords[0]}`] || 1;\n const subdivisions2 = props[`n${coords[1]}`] || 1;\n const numVertices = (subdivisions1 + 1) * (subdivisions2 + 1);\n\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n const texCoords = new Float32Array(numVertices * 2);\n\n if (flipCull) {\n c1len = -c1len;\n }\n\n let i2 = 0;\n let i3 = 0;\n for (let z = 0; z <= subdivisions2; z++) {\n for (let x = 0; x <= subdivisions1; x++) {\n const u = x / subdivisions1;\n const v = z / subdivisions2;\n texCoords[i2 + 0] = flipCull ? 1 - u : u;\n texCoords[i2 + 1] = v;\n\n switch (type) {\n case 'x,y':\n positions[i3 + 0] = c1len * u - c1len * 0.5;\n positions[i3 + 1] = c2len * v - c2len * 0.5;\n positions[i3 + 2] = offset;\n\n normals[i3 + 0] = 0;\n normals[i3 + 1] = 0;\n normals[i3 + 2] = flipCull ? 1 : -1;\n break;\n\n case 'x,z':\n positions[i3 + 0] = c1len * u - c1len * 0.5;\n positions[i3 + 1] = offset;\n positions[i3 + 2] = c2len * v - c2len * 0.5;\n\n normals[i3 + 0] = 0;\n normals[i3 + 1] = flipCull ? 1 : -1;\n normals[i3 + 2] = 0;\n break;\n\n case 'y,z':\n positions[i3 + 0] = offset;\n positions[i3 + 1] = c1len * u - c1len * 0.5;\n positions[i3 + 2] = c2len * v - c2len * 0.5;\n\n normals[i3 + 0] = flipCull ? 1 : -1;\n normals[i3 + 1] = 0;\n normals[i3 + 2] = 0;\n break;\n\n default:\n throw new Error('PlaneGeometry: unknown type');\n }\n\n i2 += 2;\n i3 += 3;\n }\n }\n\n const numVertsAcross = subdivisions1 + 1;\n const indices = new Uint16Array(subdivisions1 * subdivisions2 * 6);\n\n for (let z = 0; z < subdivisions2; z++) {\n for (let x = 0; x < subdivisions1; x++) {\n const index = (z * subdivisions1 + x) * 6;\n // Make triangle 1 of quad.\n indices[index + 0] = (z + 0) * numVertsAcross + x;\n indices[index + 1] = (z + 1) * numVertsAcross + x;\n indices[index + 2] = (z + 0) * numVertsAcross + x + 1;\n\n // Make triangle 2 of quad.\n indices[index + 3] = (z + 1) * numVertsAcross + x;\n indices[index + 4] = (z + 1) * numVertsAcross + x + 1;\n indices[index + 5] = (z + 0) * numVertsAcross + x + 1;\n }\n }\n\n const geometry = {\n indices: {size: 1, value: indices},\n attributes: {\n POSITION: {size: 3, value: positions},\n NORMAL: {size: 3, value: normals},\n TEXCOORD_0: {size: 2, value: texCoords}\n }\n };\n\n // Optionally, unpack indexed geometry\n return unpack ? unpackIndexedGeometry(geometry) : geometry;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"plane-geometry.js","names":["uid","Geometry","unpackIndexedGeometry","PlaneGeometry","constructor","props","arguments","length","undefined","id","indices","attributes","tesselatePlane","topology","type","offset","flipCull","unpack","coords","split","c1len","c2len","subdivisions1","subdivisions2","numVertices","positions","Float32Array","normals","texCoords","i2","i3","z","x","u","v","Error","numVertsAcross","Uint16Array","index","geometry","size","value","POSITION","NORMAL","TEXCOORD_0"],"sources":["../../src/geometries/plane-geometry.ts"],"sourcesContent":["import {uid} from '@luma.gl/core';\nimport {Geometry} from '../geometry/geometry';\nimport {unpackIndexedGeometry} from '../geometry/geometry-utils';\n\nexport type PlaneGeometryProps = {\n id?: string;\n radius?: number;\n attributes?: any\n};\n\n// Primitives inspired by TDL http://code.google.com/p/webglsamples/,\n// copyright 2011 Google Inc. new BSD License\n// (http://www.opensource.org/licenses/bsd-license.php).\nexport class PlaneGeometry extends Geometry {\n constructor(props: PlaneGeometryProps = {}) {\n const {id = uid('plane-geometry')} = props;\n\n const {indices, attributes} = tesselatePlane(props);\n super({\n ...props,\n id,\n topology: 'triangle-list',\n indices,\n attributes: {...attributes, ...props.attributes}\n });\n }\n}\n\n/* eslint-disable complexity, max-statements */\nfunction tesselatePlane(props: any) {\n const {type = 'x,y', offset = 0, flipCull = false, unpack = false} = props;\n\n const coords = type.split(',');\n // width, height\n let c1len = props[`${coords[0]}len`] || 1;\n const c2len = props[`${coords[1]}len`] || 1;\n // subdivisionsWidth, subdivisionsDepth\n const subdivisions1 = props[`n${coords[0]}`] || 1;\n const subdivisions2 = props[`n${coords[1]}`] || 1;\n const numVertices = (subdivisions1 + 1) * (subdivisions2 + 1);\n\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n const texCoords = new Float32Array(numVertices * 2);\n\n if (flipCull) {\n c1len = -c1len;\n }\n\n let i2 = 0;\n let i3 = 0;\n for (let z = 0; z <= subdivisions2; z++) {\n for (let x = 0; x <= subdivisions1; x++) {\n const u = x / subdivisions1;\n const v = z / subdivisions2;\n texCoords[i2 + 0] = flipCull ? 1 - u : u;\n texCoords[i2 + 1] = v;\n\n switch (type) {\n case 'x,y':\n positions[i3 + 0] = c1len * u - c1len * 0.5;\n positions[i3 + 1] = c2len * v - c2len * 0.5;\n positions[i3 + 2] = offset;\n\n normals[i3 + 0] = 0;\n normals[i3 + 1] = 0;\n normals[i3 + 2] = flipCull ? 1 : -1;\n break;\n\n case 'x,z':\n positions[i3 + 0] = c1len * u - c1len * 0.5;\n positions[i3 + 1] = offset;\n positions[i3 + 2] = c2len * v - c2len * 0.5;\n\n normals[i3 + 0] = 0;\n normals[i3 + 1] = flipCull ? 1 : -1;\n normals[i3 + 2] = 0;\n break;\n\n case 'y,z':\n positions[i3 + 0] = offset;\n positions[i3 + 1] = c1len * u - c1len * 0.5;\n positions[i3 + 2] = c2len * v - c2len * 0.5;\n\n normals[i3 + 0] = flipCull ? 1 : -1;\n normals[i3 + 1] = 0;\n normals[i3 + 2] = 0;\n break;\n\n default:\n throw new Error('PlaneGeometry: unknown type');\n }\n\n i2 += 2;\n i3 += 3;\n }\n }\n\n const numVertsAcross = subdivisions1 + 1;\n const indices = new Uint16Array(subdivisions1 * subdivisions2 * 6);\n\n for (let z = 0; z < subdivisions2; z++) {\n for (let x = 0; x < subdivisions1; x++) {\n const index = (z * subdivisions1 + x) * 6;\n // Make triangle 1 of quad.\n indices[index + 0] = (z + 0) * numVertsAcross + x;\n indices[index + 1] = (z + 1) * numVertsAcross + x;\n indices[index + 2] = (z + 0) * numVertsAcross + x + 1;\n\n // Make triangle 2 of quad.\n indices[index + 3] = (z + 1) * numVertsAcross + x;\n indices[index + 4] = (z + 1) * numVertsAcross + x + 1;\n indices[index + 5] = (z + 0) * numVertsAcross + x + 1;\n }\n }\n\n const geometry = {\n indices: {size: 1, value: indices},\n attributes: {\n POSITION: {size: 3, value: positions},\n NORMAL: {size: 3, value: normals},\n TEXCOORD_0: {size: 2, value: texCoords}\n }\n };\n\n // Optionally, unpack indexed geometry\n return unpack ? unpackIndexedGeometry(geometry) : geometry;\n}\n"],"mappings":"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"}