@luma.gl/engine 9.0.0-alpha.19 → 9.0.0-alpha.21

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 (54) hide show
  1. package/dist/dist.dev.js +134 -135
  2. package/dist/geometries/cube-geometry.d.ts +1 -1
  3. package/dist/geometries/cube-geometry.d.ts.map +1 -1
  4. package/dist/geometries/cube-geometry.js +1 -1
  5. package/dist/geometries/cube-geometry.js.map +1 -1
  6. package/dist/geometries/ico-sphere-geometry.d.ts +1 -1
  7. package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -1
  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.d.ts +1 -1
  11. package/dist/geometries/plane-geometry.d.ts.map +1 -1
  12. package/dist/geometries/plane-geometry.js +1 -1
  13. package/dist/geometries/plane-geometry.js.map +1 -1
  14. package/dist/geometries/sphere-geometry.d.ts +1 -1
  15. package/dist/geometries/sphere-geometry.d.ts.map +1 -1
  16. package/dist/geometries/sphere-geometry.js +1 -1
  17. package/dist/geometries/sphere-geometry.js.map +1 -1
  18. package/dist/geometries/truncated-cone-geometry.d.ts +1 -1
  19. package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
  20. package/dist/geometries/truncated-cone-geometry.js +1 -1
  21. package/dist/geometries/truncated-cone-geometry.js.map +1 -1
  22. package/dist/geometry/geometry-utils.js.map +1 -1
  23. package/dist/geometry/geometry.d.ts +1 -1
  24. package/dist/geometry/geometry.d.ts.map +1 -1
  25. package/dist/geometry/geometry.js +1 -1
  26. package/dist/geometry/geometry.js.map +1 -1
  27. package/dist/index.cjs +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +1 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/lib/clip-space.d.ts.map +1 -1
  33. package/dist/lib/clip-space.js +2 -2
  34. package/dist/lib/clip-space.js.map +1 -1
  35. package/dist/lib/model-utils.d.ts +1 -1
  36. package/dist/lib/model-utils.d.ts.map +1 -1
  37. package/dist/lib/model-utils.js.map +1 -1
  38. package/dist/lib/model.d.ts +1 -1
  39. package/dist/lib/model.d.ts.map +1 -1
  40. package/dist/lib/model.js.map +1 -1
  41. package/dist.min.js +48 -48
  42. package/package.json +6 -6
  43. package/src/.DS_Store +0 -0
  44. package/src/geometries/cube-geometry.ts +1 -1
  45. package/src/geometries/ico-sphere-geometry.ts +1 -1
  46. package/src/geometries/plane-geometry.ts +1 -1
  47. package/src/geometries/sphere-geometry.ts +1 -1
  48. package/src/geometries/truncated-cone-geometry.ts +1 -1
  49. package/src/geometry/geometry-utils.ts +1 -1
  50. package/src/geometry/geometry.ts +1 -1
  51. package/src/index.ts +1 -1
  52. package/src/lib/clip-space.ts +2 -2
  53. package/src/lib/model-utils.ts +1 -1
  54. package/src/lib/model.ts +1 -1
@@ -1,4 +1,4 @@
1
- import Geometry from '../geometry/geometry';
1
+ import { Geometry } from '../geometry/geometry';
2
2
  import { GeometryTable } from '../geometry/geometry-table';
3
3
  export declare type TruncatedConeGeometryProps = {
4
4
  topRadius?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"truncated-cone-geometry.d.ts","sourceRoot":"","sources":["../../src/geometries/truncated-cone-geometry.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAQzD,oBAAY,0BAA0B,GAAG;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAChC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,EAAE,0BAA0B,GAAG,aAAa,CAO3F;AAED,qBAAa,qBAAsB,SAAQ,QAAQ;gBACrC,KAAK,GAAE,0BAA0B,GAAG;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,GAAG,CAAA;KAAM;CAcrF"}
1
+ {"version":3,"file":"truncated-cone-geometry.d.ts","sourceRoot":"","sources":["../../src/geometries/truncated-cone-geometry.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAQzD,oBAAY,0BAA0B,GAAG;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAChC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,EAAE,0BAA0B,GAAG,aAAa,CAO3F;AAED,qBAAa,qBAAsB,SAAQ,QAAQ;gBACrC,KAAK,GAAE,0BAA0B,GAAG;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,GAAG,CAAA;KAAM;CAcrF"}
@@ -1,5 +1,5 @@
1
1
  import { uid } from '@luma.gl/api';
2
- import Geometry from "../geometry/geometry.js";
2
+ import { Geometry } from "../geometry/geometry.js";
3
3
  const INDEX_OFFSETS = {
4
4
  x: [2, 0, 1],
5
5
  y: [0, 1, 2],
@@ -1 +1 @@
1
- {"version":3,"file":"truncated-cone-geometry.js","names":["uid","Geometry","INDEX_OFFSETS","x","y","z","makeTruncatedConeGeometry","props","indices","attributes","tesselateTruncatedCone","length","TruncatedConeGeometry","constructor","arguments","undefined","id","POSITION","size","value","NORMAL","TEXCOORD_0","bottomRadius","topRadius","height","nradial","nvertical","verticalAxis","topCap","bottomCap","extra","numVertices","slant","Math","atan2","msin","sin","mcos","cos","mpi","PI","cosSlant","sinSlant","start","end","vertsAroundEdge","Uint16Array","indexOffset","positions","Float32Array","normals","texCoords","i3","i2","i","v","ringRadius","j","index"],"sources":["../../src/geometries/truncated-cone-geometry.ts"],"sourcesContent":["import {uid} from '@luma.gl/api';\nimport Geometry from '../geometry/geometry';\nimport {GeometryTable} from '../geometry/geometry-table';\n\nconst INDEX_OFFSETS = {\n x: [2, 0, 1],\n y: [0, 1, 2],\n z: [1, 2, 0]\n};\n\nexport type TruncatedConeGeometryProps = {\n topRadius?: number;\n bottomRadius?: number;\n topCap?: boolean;\n bottomCap?: boolean;\n height?: number;\n nradial?: number;\n nvertical?: number;\n verticalAxis?: 'x' | 'y' | 'z';\n};\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).\n */\nexport function makeTruncatedConeGeometry(props?: TruncatedConeGeometryProps): GeometryTable {\n const {indices, attributes} = tesselateTruncatedCone(props);\n return {\n length: indices.length,\n indices,\n attributes\n };\n}\n\nexport class TruncatedConeGeometry extends Geometry {\n constructor(props: TruncatedConeGeometryProps & {id?: string; attributes?: any} = {}) {\n const {id = uid('truncated-code-geometry')} = props;\n const {indices, attributes} = tesselateTruncatedCone(props);\n super({\n ...props,\n id,\n indices,\n attributes: {\n POSITION: {size: 3, value: attributes.POSITION},\n NORMAL: {size: 3, value: attributes.NORMAL},\n TEXCOORD_0: {size: 2, value: attributes.TEXCOORD_0},\n ...props.attributes}\n });\n }\n}\n\n/* eslint-disable max-statements, complexity */\nfunction tesselateTruncatedCone(props: TruncatedConeGeometryProps = {}) {\n const {\n bottomRadius = 0,\n topRadius = 0,\n height = 1,\n nradial = 10,\n nvertical = 10,\n verticalAxis = 'y',\n topCap = false,\n bottomCap = false\n } = props;\n\n const extra = (topCap ? 2 : 0) + (bottomCap ? 2 : 0);\n const numVertices = (nradial + 1) * (nvertical + 1 + extra);\n\n const slant = Math.atan2(bottomRadius - topRadius, height);\n const msin = Math.sin;\n const mcos = Math.cos;\n const mpi = Math.PI;\n const cosSlant = mcos(slant);\n const sinSlant = msin(slant);\n const start = topCap ? -2 : 0;\n const end = nvertical + (bottomCap ? 2 : 0);\n const vertsAroundEdge = nradial + 1;\n\n const indices = new Uint16Array(nradial * (nvertical + extra) * 6);\n const indexOffset = INDEX_OFFSETS[verticalAxis];\n\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n const texCoords = new Float32Array(numVertices * 2);\n\n let i3 = 0;\n let i2 = 0;\n for (let i = start; i <= end; i++) {\n let v = i / nvertical;\n let y = height * v;\n let ringRadius;\n\n if (i < 0) {\n y = 0;\n v = 1;\n ringRadius = bottomRadius;\n } else if (i > nvertical) {\n y = height;\n v = 1;\n ringRadius = topRadius;\n } else {\n ringRadius = bottomRadius + (topRadius - bottomRadius) * (i / nvertical);\n }\n if (i === -2 || i === nvertical + 2) {\n ringRadius = 0;\n v = 0;\n }\n y -= height / 2;\n for (let j = 0; j < vertsAroundEdge; j++) {\n const sin = msin((j * mpi * 2) / nradial);\n const cos = mcos((j * mpi * 2) / nradial);\n\n positions[i3 + indexOffset[0]] = sin * ringRadius;\n positions[i3 + indexOffset[1]] = y;\n positions[i3 + indexOffset[2]] = cos * ringRadius;\n\n normals[i3 + indexOffset[0]] = i < 0 || i > nvertical ? 0 : sin * cosSlant;\n normals[i3 + indexOffset[1]] = i < 0 ? -1 : i > nvertical ? 1 : sinSlant;\n normals[i3 + indexOffset[2]] = i < 0 || i > nvertical ? 0 : cos * cosSlant;\n\n texCoords[i2 + 0] = j / nradial;\n texCoords[i2 + 1] = v;\n\n i2 += 2;\n i3 += 3;\n }\n }\n\n for (let i = 0; i < nvertical + extra; i++) {\n for (let j = 0; j < nradial; j++) {\n const index = (i * nradial + j) * 6;\n indices[index + 0] = vertsAroundEdge * (i + 0) + 0 + j;\n indices[index + 1] = vertsAroundEdge * (i + 0) + 1 + j;\n indices[index + 2] = vertsAroundEdge * (i + 1) + 1 + j;\n indices[index + 3] = vertsAroundEdge * (i + 0) + 0 + j;\n indices[index + 4] = vertsAroundEdge * (i + 1) + 1 + j;\n indices[index + 5] = vertsAroundEdge * (i + 1) + 0 + j;\n }\n }\n\n return {\n indices,\n attributes: {\n POSITION: positions,\n NORMAL: normals,\n TEXCOORD_0: texCoords\n }\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"truncated-cone-geometry.js","names":["uid","Geometry","INDEX_OFFSETS","x","y","z","makeTruncatedConeGeometry","props","indices","attributes","tesselateTruncatedCone","length","TruncatedConeGeometry","constructor","arguments","undefined","id","POSITION","size","value","NORMAL","TEXCOORD_0","bottomRadius","topRadius","height","nradial","nvertical","verticalAxis","topCap","bottomCap","extra","numVertices","slant","Math","atan2","msin","sin","mcos","cos","mpi","PI","cosSlant","sinSlant","start","end","vertsAroundEdge","Uint16Array","indexOffset","positions","Float32Array","normals","texCoords","i3","i2","i","v","ringRadius","j","index"],"sources":["../../src/geometries/truncated-cone-geometry.ts"],"sourcesContent":["import {uid} from '@luma.gl/api';\nimport {Geometry} from '../geometry/geometry';\nimport {GeometryTable} from '../geometry/geometry-table';\n\nconst INDEX_OFFSETS = {\n x: [2, 0, 1],\n y: [0, 1, 2],\n z: [1, 2, 0]\n};\n\nexport type TruncatedConeGeometryProps = {\n topRadius?: number;\n bottomRadius?: number;\n topCap?: boolean;\n bottomCap?: boolean;\n height?: number;\n nradial?: number;\n nvertical?: number;\n verticalAxis?: 'x' | 'y' | 'z';\n};\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).\n */\nexport function makeTruncatedConeGeometry(props?: TruncatedConeGeometryProps): GeometryTable {\n const {indices, attributes} = tesselateTruncatedCone(props);\n return {\n length: indices.length,\n indices,\n attributes\n };\n}\n\nexport class TruncatedConeGeometry extends Geometry {\n constructor(props: TruncatedConeGeometryProps & {id?: string; attributes?: any} = {}) {\n const {id = uid('truncated-code-geometry')} = props;\n const {indices, attributes} = tesselateTruncatedCone(props);\n super({\n ...props,\n id,\n indices,\n attributes: {\n POSITION: {size: 3, value: attributes.POSITION},\n NORMAL: {size: 3, value: attributes.NORMAL},\n TEXCOORD_0: {size: 2, value: attributes.TEXCOORD_0},\n ...props.attributes}\n });\n }\n}\n\n/* eslint-disable max-statements, complexity */\nfunction tesselateTruncatedCone(props: TruncatedConeGeometryProps = {}) {\n const {\n bottomRadius = 0,\n topRadius = 0,\n height = 1,\n nradial = 10,\n nvertical = 10,\n verticalAxis = 'y',\n topCap = false,\n bottomCap = false\n } = props;\n\n const extra = (topCap ? 2 : 0) + (bottomCap ? 2 : 0);\n const numVertices = (nradial + 1) * (nvertical + 1 + extra);\n\n const slant = Math.atan2(bottomRadius - topRadius, height);\n const msin = Math.sin;\n const mcos = Math.cos;\n const mpi = Math.PI;\n const cosSlant = mcos(slant);\n const sinSlant = msin(slant);\n const start = topCap ? -2 : 0;\n const end = nvertical + (bottomCap ? 2 : 0);\n const vertsAroundEdge = nradial + 1;\n\n const indices = new Uint16Array(nradial * (nvertical + extra) * 6);\n const indexOffset = INDEX_OFFSETS[verticalAxis];\n\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n const texCoords = new Float32Array(numVertices * 2);\n\n let i3 = 0;\n let i2 = 0;\n for (let i = start; i <= end; i++) {\n let v = i / nvertical;\n let y = height * v;\n let ringRadius;\n\n if (i < 0) {\n y = 0;\n v = 1;\n ringRadius = bottomRadius;\n } else if (i > nvertical) {\n y = height;\n v = 1;\n ringRadius = topRadius;\n } else {\n ringRadius = bottomRadius + (topRadius - bottomRadius) * (i / nvertical);\n }\n if (i === -2 || i === nvertical + 2) {\n ringRadius = 0;\n v = 0;\n }\n y -= height / 2;\n for (let j = 0; j < vertsAroundEdge; j++) {\n const sin = msin((j * mpi * 2) / nradial);\n const cos = mcos((j * mpi * 2) / nradial);\n\n positions[i3 + indexOffset[0]] = sin * ringRadius;\n positions[i3 + indexOffset[1]] = y;\n positions[i3 + indexOffset[2]] = cos * ringRadius;\n\n normals[i3 + indexOffset[0]] = i < 0 || i > nvertical ? 0 : sin * cosSlant;\n normals[i3 + indexOffset[1]] = i < 0 ? -1 : i > nvertical ? 1 : sinSlant;\n normals[i3 + indexOffset[2]] = i < 0 || i > nvertical ? 0 : cos * cosSlant;\n\n texCoords[i2 + 0] = j / nradial;\n texCoords[i2 + 1] = v;\n\n i2 += 2;\n i3 += 3;\n }\n }\n\n for (let i = 0; i < nvertical + extra; i++) {\n for (let j = 0; j < nradial; j++) {\n const index = (i * nradial + j) * 6;\n indices[index + 0] = vertsAroundEdge * (i + 0) + 0 + j;\n indices[index + 1] = vertsAroundEdge * (i + 0) + 1 + j;\n indices[index + 2] = vertsAroundEdge * (i + 1) + 1 + j;\n indices[index + 3] = vertsAroundEdge * (i + 0) + 0 + j;\n indices[index + 4] = vertsAroundEdge * (i + 1) + 1 + j;\n indices[index + 5] = vertsAroundEdge * (i + 1) + 0 + j;\n }\n }\n\n return {\n indices,\n attributes: {\n POSITION: positions,\n NORMAL: normals,\n TEXCOORD_0: texCoords\n }\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"geometry-utils.js","names":["unpackIndexedGeometry","geometry","indices","attributes","vertexCount","value","length","unpackedAttributes","attributeName","attribute","constant","size","unpackedValue","constructor","x","index","i","Object","assign"],"sources":["../../src/geometry/geometry-utils.ts"],"sourcesContent":["// import type Geometry from './geometry';\n\nexport function unpackIndexedGeometry(geometry: any) {\n const {indices, attributes} = geometry;\n if (!indices) {\n return geometry;\n }\n\n const vertexCount = indices.value.length;\n const unpackedAttributes: Record<string, any> = {};\n\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const {constant, value, size} = attribute;\n if (constant || !size) {\n continue; // eslint-disable-line\n }\n const unpackedValue = new value.constructor(vertexCount * size);\n for (let x = 0; x < vertexCount; ++x) {\n const index = indices.value[x];\n for (let i = 0; i < size; i++) {\n unpackedValue[x * size + i] = value[index * size + i];\n }\n }\n unpackedAttributes[attributeName] = {size, value: unpackedValue};\n }\n\n return {\n attributes: Object.assign({}, attributes, unpackedAttributes)\n };\n}\n"],"mappings":"AAEA,OAAO,SAASA,qBAAqBA,CAACC,QAAa,EAAE;EACnD,MAAM;IAACC,OAAO;IAAEC;EAAU,CAAC,GAAGF,QAAQ;EACtC,IAAI,CAACC,OAAO,EAAE;IACZ,OAAOD,QAAQ;EACjB;EAEA,MAAMG,WAAW,GAAGF,OAAO,CAACG,KAAK,CAACC,MAAM;EACxC,MAAMC,kBAAuC,GAAG,CAAC,CAAC;EAElD,KAAK,MAAMC,aAAa,IAAIL,UAAU,EAAE;IACtC,MAAMM,SAAS,GAAGN,UAAU,CAACK,aAAa,CAAC;IAC3C,MAAM;MAACE,QAAQ;MAAEL,KAAK;MAAEM;IAAI,CAAC,GAAGF,SAAS;IACzC,IAAIC,QAAQ,IAAI,CAACC,IAAI,EAAE;MACrB;IACF;IACA,MAAMC,aAAa,GAAG,IAAIP,KAAK,CAACQ,WAAW,CAACT,WAAW,GAAGO,IAAI,CAAC;IAC/D,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGV,WAAW,EAAE,EAAEU,CAAC,EAAE;MACpC,MAAMC,KAAK,GAAGb,OAAO,CAACG,KAAK,CAACS,CAAC,CAAC;MAC9B,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,IAAI,EAAEK,CAAC,EAAE,EAAE;QAC7BJ,aAAa,CAACE,CAAC,GAAGH,IAAI,GAAGK,CAAC,CAAC,GAAGX,KAAK,CAACU,KAAK,GAAGJ,IAAI,GAAGK,CAAC,CAAC;MACvD;IACF;IACAT,kBAAkB,CAACC,aAAa,CAAC,GAAG;MAACG,IAAI;MAAEN,KAAK,EAAEO;IAAa,CAAC;EAClE;EAEA,OAAO;IACLT,UAAU,EAAEc,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,EAAEf,UAAU,EAAEI,kBAAkB;EAC9D,CAAC;AACH"}
1
+ {"version":3,"file":"geometry-utils.js","names":["unpackIndexedGeometry","geometry","indices","attributes","vertexCount","value","length","unpackedAttributes","attributeName","attribute","constant","size","unpackedValue","constructor","x","index","i","Object","assign"],"sources":["../../src/geometry/geometry-utils.ts"],"sourcesContent":["// import type {Geometry} from './geometry';\n\nexport function unpackIndexedGeometry(geometry: any) {\n const {indices, attributes} = geometry;\n if (!indices) {\n return geometry;\n }\n\n const vertexCount = indices.value.length;\n const unpackedAttributes: Record<string, any> = {};\n\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const {constant, value, size} = attribute;\n if (constant || !size) {\n continue; // eslint-disable-line\n }\n const unpackedValue = new value.constructor(vertexCount * size);\n for (let x = 0; x < vertexCount; ++x) {\n const index = indices.value[x];\n for (let i = 0; i < size; i++) {\n unpackedValue[x * size + i] = value[index * size + i];\n }\n }\n unpackedAttributes[attributeName] = {size, value: unpackedValue};\n }\n\n return {\n attributes: Object.assign({}, attributes, unpackedAttributes)\n };\n}\n"],"mappings":"AAEA,OAAO,SAASA,qBAAqBA,CAACC,QAAa,EAAE;EACnD,MAAM;IAACC,OAAO;IAAEC;EAAU,CAAC,GAAGF,QAAQ;EACtC,IAAI,CAACC,OAAO,EAAE;IACZ,OAAOD,QAAQ;EACjB;EAEA,MAAMG,WAAW,GAAGF,OAAO,CAACG,KAAK,CAACC,MAAM;EACxC,MAAMC,kBAAuC,GAAG,CAAC,CAAC;EAElD,KAAK,MAAMC,aAAa,IAAIL,UAAU,EAAE;IACtC,MAAMM,SAAS,GAAGN,UAAU,CAACK,aAAa,CAAC;IAC3C,MAAM;MAACE,QAAQ;MAAEL,KAAK;MAAEM;IAAI,CAAC,GAAGF,SAAS;IACzC,IAAIC,QAAQ,IAAI,CAACC,IAAI,EAAE;MACrB;IACF;IACA,MAAMC,aAAa,GAAG,IAAIP,KAAK,CAACQ,WAAW,CAACT,WAAW,GAAGO,IAAI,CAAC;IAC/D,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGV,WAAW,EAAE,EAAEU,CAAC,EAAE;MACpC,MAAMC,KAAK,GAAGb,OAAO,CAACG,KAAK,CAACS,CAAC,CAAC;MAC9B,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,IAAI,EAAEK,CAAC,EAAE,EAAE;QAC7BJ,aAAa,CAACE,CAAC,GAAGH,IAAI,GAAGK,CAAC,CAAC,GAAGX,KAAK,CAACU,KAAK,GAAGJ,IAAI,GAAGK,CAAC,CAAC;MACvD;IACF;IACAT,kBAAkB,CAACC,aAAa,CAAC,GAAG;MAACG,IAAI;MAAEN,KAAK,EAAEO;IAAa,CAAC;EAClE;EAEA,OAAO;IACLT,UAAU,EAAEc,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,EAAEf,UAAU,EAAEI,kBAAkB;EAC9D,CAAC;AACH"}
@@ -36,7 +36,7 @@ declare type GeometryAttributes = {
36
36
  value: Uint32Array | Uint16Array;
37
37
  };
38
38
  };
39
- export default class Geometry {
39
+ export declare class Geometry {
40
40
  /** @deprecated */
41
41
  static DRAW_MODE: {
42
42
  POINTS: GL;
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/geometry/geometry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,iBAAiB,EAAE,UAAU,EAAC,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEpC;;;GAGG;AACH,oBAAY,UAAU,GACpB,EAAE,CAAC,MAAM,GAAI,sBAAsB;AACnC,EAAE,CAAC,KAAK,GAAI,wDAAwD;AACpE,EAAE,CAAC,SAAS,GAAI,8EAA8E;AAC9F,EAAE,CAAC,UAAU,GAAI,4EAA4E;AAC7F,EAAE,CAAC,SAAS,GAAI,0EAA0E;AAC1F,EAAE,CAAC,cAAc,GAAI,uCAAuC;AAC5D,EAAE,CAAC,YAAY,CACd;AAEH,oBAAY,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB,CAAA;AAED,oBAAY,aAAa,GAAG;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,UAAU,CAAC,CAAC;IAC5D,OAAO,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,eAAe,GAAG,gBAAgB,CAAC;IAC1F,kBAAkB;IAClB,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF,aAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAAA;KAAC,CAAC;CAC7D,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,kBAAkB;IAClB,MAAM,CAAC,SAAS;;;;;;;;MAQd;IAEF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAEvC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,kBAAkB;IAClB,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAgB;IAE7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,MAAM,EAAE,iBAAiB,CAAC;QAC1B,UAAU,EAAE,iBAAiB,CAAC;QAC9B,OAAO,CAAC,EAAE,iBAAiB,CAAC;QAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAA;KAC7C,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;gBAEjC,KAAK,GAAE,aAAkB;IAuDrC,wDAAwD;IACxD,IAAI,IAAI,eAEP;IAED,cAAc,IAAI,MAAM;IAKxB,aAAa,IAAI,kBAAkB;IAOnC,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IASrC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI;IAKjF,qBAAqB,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM;CAgB7D"}
1
+ {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/geometry/geometry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,iBAAiB,EAAE,UAAU,EAAC,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEpC;;;GAGG;AACH,oBAAY,UAAU,GACpB,EAAE,CAAC,MAAM,GAAI,sBAAsB;AACnC,EAAE,CAAC,KAAK,GAAI,wDAAwD;AACpE,EAAE,CAAC,SAAS,GAAI,8EAA8E;AAC9F,EAAE,CAAC,UAAU,GAAI,4EAA4E;AAC7F,EAAE,CAAC,SAAS,GAAI,0EAA0E;AAC1F,EAAE,CAAC,cAAc,GAAI,uCAAuC;AAC5D,EAAE,CAAC,YAAY,CACd;AAEH,oBAAY,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB,CAAA;AAED,oBAAY,aAAa,GAAG;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,UAAU,CAAC,CAAC;IAC5D,OAAO,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,eAAe,GAAG,gBAAgB,CAAC;IAC1F,kBAAkB;IAClB,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF,aAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAAA;KAAC,CAAC;CAC7D,CAAC;AAEF,qBAAa,QAAQ;IACnB,kBAAkB;IAClB,MAAM,CAAC,SAAS;;;;;;;;MAQd;IAEF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAEvC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,kBAAkB;IAClB,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAgB;IAE7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,MAAM,EAAE,iBAAiB,CAAC;QAC1B,UAAU,EAAE,iBAAiB,CAAC;QAC9B,OAAO,CAAC,EAAE,iBAAiB,CAAC;QAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAA;KAC7C,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;gBAEjC,KAAK,GAAE,aAAkB;IAuDrC,wDAAwD;IACxD,IAAI,IAAI,eAEP;IAED,cAAc,IAAI,MAAM;IAKxB,aAAa,IAAI,kBAAkB;IAOnC,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IASrC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI;IAKjF,qBAAqB,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM;CAgB7D"}
@@ -1,7 +1,7 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
2
  import { uid, assert } from '@luma.gl/api';
3
3
  import GL from '@luma.gl/constants';
4
- export default class Geometry {
4
+ export class Geometry {
5
5
  constructor() {
6
6
  let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7
7
  _defineProperty(this, "id", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.js","names":["uid","assert","GL","Geometry","constructor","props","arguments","length","undefined","_defineProperty","TRIANGLES","id","drawMode","attributes","indices","vertexCount","topology","convertToTopology","ArrayBuffer","isView","value","size","attributeName","attributeValue","Object","entries","attribute","concat","_print","isIndexed","assign","_calculateVertexCount","mode","getVertexCount","getAttributes","_setAttributes","Infinity","constant","Math","min","Number","isFinite","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLE_STRIP","TRIANGLE_FAN","Error","String"],"sources":["../../src/geometry/geometry.ts"],"sourcesContent":["// luma.gl, MIT license\nimport type {PrimitiveTopology, TypedArray} from '@luma.gl/api';\nimport {uid, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\n\n/**\n * Rendering primitives - \"topology\" specifies how to extract primitives from vertices.\n * @deprecated - use string constants instead\n */\nexport type GLTopology =\n GL.POINTS | // draw single points.\n GL.LINES | // draw lines. Each vertex connects to the one after it.\n GL.LINE_LOOP | // draw lines. Each set of two vertices is treated as a separate line segment.\n GL.LINE_STRIP | // draw a connected group of line segments from the first vertex to the last\n GL.TRIANGLES | // draw triangles. Each set of three vertices creates a separate triangle.\n GL.TRIANGLE_STRIP | // draw a connected group of triangles.\n GL.TRIANGLE_FAN // draw a connected group of triangles.\n ;\n\nexport type GeometryAttribute = {\n size?: number;\n value: TypedArray;\n [key: string]: any\n}\n\nexport type GeometryProps = {\n id?: string;\n attributes?: Record<string, GeometryAttribute | TypedArray>,\n indices?: GeometryAttribute | TypedArray;\n vertexCount?: number;\n /** Determines how vertices are read from the 'vertex' attributes */\n topology?: 'point-list' | 'line-list' | 'line-strip' | 'triangle-list' | 'triangle-strip';\n /** @deprecated */\n drawMode?: GLTopology;\n};\n\ntype GeometryAttributes = {\n POSITION: GeometryAttribute,\n NORMAL: GeometryAttribute,\n TEXCOORD_0: GeometryAttribute,\n COLOR_0?: GeometryAttribute,\n indices?: {size?: number, value: Uint32Array | Uint16Array};\n};\n\nexport default class Geometry {\n /** @deprecated */\n static DRAW_MODE = {\n POINTS: GL.POINTS, // draw single points.\n LINES: GL.LINES, // draw lines. Each vertex connects to the one after it.\n LINE_LOOP: GL.LINE_LOOP, // draw lines. Each set of two vertices is treated as a separate line segment.\n LINE_STRIP: GL.LINE_STRIP, // draw a connected group of line segments from the first vertex to the last\n TRIANGLES: GL.TRIANGLES, // draw triangles. Each set of three vertices creates a separate triangle.\n TRIANGLE_STRIP: GL.TRIANGLE_STRIP, // draw a connected group of triangles.\n TRIANGLE_FAN: GL.TRIANGLE_FAN // draw a connected group of triangles.\n };\n\n readonly id: string;\n userData: Record<string, unknown> = {};\n\n /** Determines how vertices are read from the 'vertex' attributes */\n topology?: PrimitiveTopology;\n /** @deprecated */\n readonly drawMode: GLTopology = GL.TRIANGLES;\n\n readonly vertexCount: number;\n readonly attributes: {\n POSITION: GeometryAttribute,\n NORMAL: GeometryAttribute,\n TEXCOORD_0: GeometryAttribute,\n COLOR_0?: GeometryAttribute,\n [key: string]: GeometryAttribute | undefined\n };\n readonly indices?: Uint16Array | Uint32Array;\n\n constructor(props: GeometryProps = {}) {\n const {\n id = uid('geometry'),\n drawMode = GL.TRIANGLES,\n attributes = {},\n indices = null,\n vertexCount = null\n } = props;\n\n this.id = id;\n this.drawMode = drawMode;\n this.topology = props.topology || convertToTopology(drawMode);\n\n if (indices) {\n // @ts-expect-error\n this.indices = ArrayBuffer.isView(indices) ? {value: indices, size: 1} : indices;\n }\n\n // @ts-expect-error\n this.attributes = {};\n\n for (const [attributeName, attributeValue] of Object.entries(attributes)) {\n\n // Wrap \"unwrapped\" arrays and try to autodetect their type\n const attribute: GeometryAttribute = ArrayBuffer.isView(attributeValue) ? {value: attributeValue} : attributeValue;\n\n assert(\n ArrayBuffer.isView(attribute.value),\n `${this._print(attributeName)}: must be typed array or object with value as typed array`\n );\n\n if ((attributeName === 'POSITION' || attributeName === 'positions') && !attribute.size) {\n attribute.size = 3;\n }\n\n // Move indices to separate field\n if (attributeName === 'indices') {\n assert(!this.indices);\n // @ts-expect-error\n this.indices = attribute;\n } else {\n this.attributes[attributeName] = attribute;\n }\n }\n\n // @ts-expect-error\n if (this.indices && this.indices.isIndexed !== undefined) {\n this.indices = Object.assign({}, this.indices);\n // @ts-expect-error\n delete this.indices.isIndexed;\n }\n\n this.vertexCount = vertexCount || this._calculateVertexCount(this.attributes, this.indices);\n }\n\n /** @deprecated Use string topology constants instead */\n get mode() {\n return this.drawMode;\n }\n\n getVertexCount(): number {\n return this.vertexCount;\n }\n\n // Return an object with all attributes plus indices added as a field.\n getAttributes(): GeometryAttributes {\n // @ts-expect-error Geometry types are a mess\n return this.indices ? {indices: this.indices, ...this.attributes} : this.attributes;\n }\n\n // PRIVATE\n\n _print(attributeName: string): string {\n return `Geometry ${this.id} attribute ${attributeName}`;\n }\n\n // GeometryAttribute\n // value: typed array\n // type: indices, vertices, uvs\n // size: elements per vertex\n // target: WebGL buffer type (string or constant)\n _setAttributes(attributes: Record<string, GeometryAttribute>, indices: any): this {\n\n return this;\n }\n\n _calculateVertexCount(attributes: any, indices: any): number {\n if (indices) {\n return indices.value.length;\n }\n let vertexCount = Infinity;\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const {value, size, constant} = attribute;\n if (!constant && value && size >= 1) {\n vertexCount = Math.min(vertexCount, value.length / size);\n }\n }\n\n assert(Number.isFinite(vertexCount));\n return vertexCount;\n }\n}\n\nfunction convertToTopology(drawMode: GLTopology): PrimitiveTopology {\n switch (drawMode) {\n case GL.POINTS: return 'point-list'; // draw single points.\n case GL.LINES: return 'line-list'; // draw lines. Each vertex connects to the one after it.\n case GL.LINE_STRIP: return 'line-strip'; // draw a connected group of line segments from the first vertex to the last\n case GL.TRIANGLES: return 'triangle-list'; // draw triangles. Each set of three vertices creates a separate triangle.\n case GL.TRIANGLE_STRIP: return 'triangle-strip'; // draw a connected group of triangles.\n\n case GL.TRIANGLE_FAN: return 'triangle-fan'; // draw a connected group of triangles.\n case GL.LINE_LOOP: return 'line-loop'; // draw lines. Each set of two vertices is treated as a separate line segment.\n default:\n throw new Error(String(drawMode));\n }\n}\n"],"mappings":";AAEA,SAAQA,GAAG,EAAEC,MAAM,QAAO,cAAc;AACxC,OAAOC,EAAE,MAAM,oBAAoB;AAyCnC,eAAe,MAAMC,QAAQ,CAAC;EA8B5BC,WAAWA,CAAA,EAA4B;IAAA,IAA3BC,KAAoB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAAAG,eAAA;IAAAA,eAAA,mBAjBD,CAAC,CAAC;IAAAA,eAAA;IAAAA,eAAA,mBAKNP,EAAE,CAACQ,SAAS;IAAAD,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAa1C,MAAM;MACJE,EAAE,GAAGX,GAAG,CAAC,UAAU,CAAC;MACpBY,QAAQ,GAAGV,EAAE,CAACQ,SAAS;MACvBG,UAAU,GAAG,CAAC,CAAC;MACfC,OAAO,GAAG,IAAI;MACdC,WAAW,GAAG;IAChB,CAAC,GAAGV,KAAK;IAET,IAAI,CAACM,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACI,QAAQ,GAAGX,KAAK,CAACW,QAAQ,IAAIC,iBAAiB,CAACL,QAAQ,CAAC;IAE7D,IAAIE,OAAO,EAAE;MAEX,IAAI,CAACA,OAAO,GAAGI,WAAW,CAACC,MAAM,CAACL,OAAO,CAAC,GAAG;QAACM,KAAK,EAAEN,OAAO;QAAEO,IAAI,EAAE;MAAC,CAAC,GAAGP,OAAO;IAClF;IAGA,IAAI,CAACD,UAAU,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,CAACS,aAAa,EAAEC,cAAc,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACZ,UAAU,CAAC,EAAE;MAGxE,MAAMa,SAA4B,GAAGR,WAAW,CAACC,MAAM,CAACI,cAAc,CAAC,GAAG;QAACH,KAAK,EAAEG;MAAc,CAAC,GAAGA,cAAc;MAElHtB,MAAM,CACJiB,WAAW,CAACC,MAAM,CAACO,SAAS,CAACN,KAAK,CAAC,KAAAO,MAAA,CAChC,IAAI,CAACC,MAAM,CAACN,aAAa,CAAC,+DAC9B;MAED,IAAI,CAACA,aAAa,KAAK,UAAU,IAAIA,aAAa,KAAK,WAAW,KAAK,CAACI,SAAS,CAACL,IAAI,EAAE;QACtFK,SAAS,CAACL,IAAI,GAAG,CAAC;MACpB;MAGA,IAAIC,aAAa,KAAK,SAAS,EAAE;QAC/BrB,MAAM,CAAC,CAAC,IAAI,CAACa,OAAO,CAAC;QAErB,IAAI,CAACA,OAAO,GAAGY,SAAS;MAC1B,CAAC,MAAM;QACL,IAAI,CAACb,UAAU,CAACS,aAAa,CAAC,GAAGI,SAAS;MAC5C;IACF;IAGA,IAAI,IAAI,CAACZ,OAAO,IAAI,IAAI,CAACA,OAAO,CAACe,SAAS,KAAKrB,SAAS,EAAE;MACxD,IAAI,CAACM,OAAO,GAAGU,MAAM,CAACM,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAChB,OAAO,CAAC;MAE9C,OAAO,IAAI,CAACA,OAAO,CAACe,SAAS;IAC/B;IAEA,IAAI,CAACd,WAAW,GAAGA,WAAW,IAAI,IAAI,CAACgB,qBAAqB,CAAC,IAAI,CAAClB,UAAU,EAAE,IAAI,CAACC,OAAO,CAAC;EAC7F;EAGA,IAAIkB,IAAIA,CAAA,EAAG;IACT,OAAO,IAAI,CAACpB,QAAQ;EACtB;EAEAqB,cAAcA,CAAA,EAAW;IACvB,OAAO,IAAI,CAAClB,WAAW;EACzB;EAGAmB,aAAaA,CAAA,EAAuB;IAElC,OAAO,IAAI,CAACpB,OAAO,GAAG;MAACA,OAAO,EAAE,IAAI,CAACA,OAAO;MAAE,GAAG,IAAI,CAACD;IAAU,CAAC,GAAG,IAAI,CAACA,UAAU;EACrF;EAIAe,MAAMA,CAACN,aAAqB,EAAU;IACpC,mBAAAK,MAAA,CAAmB,IAAI,CAAChB,EAAE,iBAAAgB,MAAA,CAAcL,aAAa;EACvD;EAOAa,cAAcA,CAACtB,UAA6C,EAAEC,OAAY,EAAQ;IAEhF,OAAO,IAAI;EACb;EAEAiB,qBAAqBA,CAAClB,UAAe,EAAEC,OAAY,EAAU;IAC3D,IAAIA,OAAO,EAAE;MACX,OAAOA,OAAO,CAACM,KAAK,CAACb,MAAM;IAC7B;IACA,IAAIQ,WAAW,GAAGqB,QAAQ;IAC1B,KAAK,MAAMd,aAAa,IAAIT,UAAU,EAAE;MACtC,MAAMa,SAAS,GAAGb,UAAU,CAACS,aAAa,CAAC;MAC3C,MAAM;QAACF,KAAK;QAAEC,IAAI;QAAEgB;MAAQ,CAAC,GAAGX,SAAS;MACzC,IAAI,CAACW,QAAQ,IAAIjB,KAAK,IAAIC,IAAI,IAAI,CAAC,EAAE;QACnCN,WAAW,GAAGuB,IAAI,CAACC,GAAG,CAACxB,WAAW,EAAEK,KAAK,CAACb,MAAM,GAAGc,IAAI,CAAC;MAC1D;IACF;IAEApB,MAAM,CAACuC,MAAM,CAACC,QAAQ,CAAC1B,WAAW,CAAC,CAAC;IACpC,OAAOA,WAAW;EACpB;AACF;AAACN,eAAA,CApIoBN,QAAQ,eAER;EACjBuC,MAAM,EAAExC,EAAE,CAACwC,MAAM;EACjBC,KAAK,EAAEzC,EAAE,CAACyC,KAAK;EACfC,SAAS,EAAE1C,EAAE,CAAC0C,SAAS;EACvBC,UAAU,EAAE3C,EAAE,CAAC2C,UAAU;EACzBnC,SAAS,EAAER,EAAE,CAACQ,SAAS;EACvBoC,cAAc,EAAE5C,EAAE,CAAC4C,cAAc;EACjCC,YAAY,EAAE7C,EAAE,CAAC6C;AACnB,CAAC;AA4HH,SAAS9B,iBAAiBA,CAACL,QAAoB,EAAqB;EAClE,QAAQA,QAAQ;IACd,KAAKV,EAAE,CAACwC,MAAM;MAAE,OAAO,YAAY;IACnC,KAAKxC,EAAE,CAACyC,KAAK;MAAE,OAAO,WAAW;IACjC,KAAKzC,EAAE,CAAC2C,UAAU;MAAE,OAAO,YAAY;IACvC,KAAK3C,EAAE,CAACQ,SAAS;MAAE,OAAO,eAAe;IACzC,KAAKR,EAAE,CAAC4C,cAAc;MAAE,OAAO,gBAAgB;IAE/C,KAAK5C,EAAE,CAAC6C,YAAY;MAAE,OAAO,cAAc;IAC3C,KAAK7C,EAAE,CAAC0C,SAAS;MAAE,OAAO,WAAW;IACrC;MACE,MAAM,IAAII,KAAK,CAACC,MAAM,CAACrC,QAAQ,CAAC,CAAC;EAAC;AAExC"}
1
+ {"version":3,"file":"geometry.js","names":["uid","assert","GL","Geometry","constructor","props","arguments","length","undefined","_defineProperty","TRIANGLES","id","drawMode","attributes","indices","vertexCount","topology","convertToTopology","ArrayBuffer","isView","value","size","attributeName","attributeValue","Object","entries","attribute","concat","_print","isIndexed","assign","_calculateVertexCount","mode","getVertexCount","getAttributes","_setAttributes","Infinity","constant","Math","min","Number","isFinite","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLE_STRIP","TRIANGLE_FAN","Error","String"],"sources":["../../src/geometry/geometry.ts"],"sourcesContent":["// luma.gl, MIT license\nimport type {PrimitiveTopology, TypedArray} from '@luma.gl/api';\nimport {uid, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\n\n/**\n * Rendering primitives - \"topology\" specifies how to extract primitives from vertices.\n * @deprecated - use string constants instead\n */\nexport type GLTopology =\n GL.POINTS | // draw single points.\n GL.LINES | // draw lines. Each vertex connects to the one after it.\n GL.LINE_LOOP | // draw lines. Each set of two vertices is treated as a separate line segment.\n GL.LINE_STRIP | // draw a connected group of line segments from the first vertex to the last\n GL.TRIANGLES | // draw triangles. Each set of three vertices creates a separate triangle.\n GL.TRIANGLE_STRIP | // draw a connected group of triangles.\n GL.TRIANGLE_FAN // draw a connected group of triangles.\n ;\n\nexport type GeometryAttribute = {\n size?: number;\n value: TypedArray;\n [key: string]: any\n}\n\nexport type GeometryProps = {\n id?: string;\n attributes?: Record<string, GeometryAttribute | TypedArray>,\n indices?: GeometryAttribute | TypedArray;\n vertexCount?: number;\n /** Determines how vertices are read from the 'vertex' attributes */\n topology?: 'point-list' | 'line-list' | 'line-strip' | 'triangle-list' | 'triangle-strip';\n /** @deprecated */\n drawMode?: GLTopology;\n};\n\ntype GeometryAttributes = {\n POSITION: GeometryAttribute,\n NORMAL: GeometryAttribute,\n TEXCOORD_0: GeometryAttribute,\n COLOR_0?: GeometryAttribute,\n indices?: {size?: number, value: Uint32Array | Uint16Array};\n};\n\nexport class Geometry {\n /** @deprecated */\n static DRAW_MODE = {\n POINTS: GL.POINTS, // draw single points.\n LINES: GL.LINES, // draw lines. Each vertex connects to the one after it.\n LINE_LOOP: GL.LINE_LOOP, // draw lines. Each set of two vertices is treated as a separate line segment.\n LINE_STRIP: GL.LINE_STRIP, // draw a connected group of line segments from the first vertex to the last\n TRIANGLES: GL.TRIANGLES, // draw triangles. Each set of three vertices creates a separate triangle.\n TRIANGLE_STRIP: GL.TRIANGLE_STRIP, // draw a connected group of triangles.\n TRIANGLE_FAN: GL.TRIANGLE_FAN // draw a connected group of triangles.\n };\n\n readonly id: string;\n userData: Record<string, unknown> = {};\n\n /** Determines how vertices are read from the 'vertex' attributes */\n topology?: PrimitiveTopology;\n /** @deprecated */\n readonly drawMode: GLTopology = GL.TRIANGLES;\n\n readonly vertexCount: number;\n readonly attributes: {\n POSITION: GeometryAttribute,\n NORMAL: GeometryAttribute,\n TEXCOORD_0: GeometryAttribute,\n COLOR_0?: GeometryAttribute,\n [key: string]: GeometryAttribute | undefined\n };\n readonly indices?: Uint16Array | Uint32Array;\n\n constructor(props: GeometryProps = {}) {\n const {\n id = uid('geometry'),\n drawMode = GL.TRIANGLES,\n attributes = {},\n indices = null,\n vertexCount = null\n } = props;\n\n this.id = id;\n this.drawMode = drawMode;\n this.topology = props.topology || convertToTopology(drawMode);\n\n if (indices) {\n // @ts-expect-error\n this.indices = ArrayBuffer.isView(indices) ? {value: indices, size: 1} : indices;\n }\n\n // @ts-expect-error\n this.attributes = {};\n\n for (const [attributeName, attributeValue] of Object.entries(attributes)) {\n\n // Wrap \"unwrapped\" arrays and try to autodetect their type\n const attribute: GeometryAttribute = ArrayBuffer.isView(attributeValue) ? {value: attributeValue} : attributeValue;\n\n assert(\n ArrayBuffer.isView(attribute.value),\n `${this._print(attributeName)}: must be typed array or object with value as typed array`\n );\n\n if ((attributeName === 'POSITION' || attributeName === 'positions') && !attribute.size) {\n attribute.size = 3;\n }\n\n // Move indices to separate field\n if (attributeName === 'indices') {\n assert(!this.indices);\n // @ts-expect-error\n this.indices = attribute;\n } else {\n this.attributes[attributeName] = attribute;\n }\n }\n\n // @ts-expect-error\n if (this.indices && this.indices.isIndexed !== undefined) {\n this.indices = Object.assign({}, this.indices);\n // @ts-expect-error\n delete this.indices.isIndexed;\n }\n\n this.vertexCount = vertexCount || this._calculateVertexCount(this.attributes, this.indices);\n }\n\n /** @deprecated Use string topology constants instead */\n get mode() {\n return this.drawMode;\n }\n\n getVertexCount(): number {\n return this.vertexCount;\n }\n\n // Return an object with all attributes plus indices added as a field.\n getAttributes(): GeometryAttributes {\n // @ts-expect-error Geometry types are a mess\n return this.indices ? {indices: this.indices, ...this.attributes} : this.attributes;\n }\n\n // PRIVATE\n\n _print(attributeName: string): string {\n return `Geometry ${this.id} attribute ${attributeName}`;\n }\n\n // GeometryAttribute\n // value: typed array\n // type: indices, vertices, uvs\n // size: elements per vertex\n // target: WebGL buffer type (string or constant)\n _setAttributes(attributes: Record<string, GeometryAttribute>, indices: any): this {\n\n return this;\n }\n\n _calculateVertexCount(attributes: any, indices: any): number {\n if (indices) {\n return indices.value.length;\n }\n let vertexCount = Infinity;\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const {value, size, constant} = attribute;\n if (!constant && value && size >= 1) {\n vertexCount = Math.min(vertexCount, value.length / size);\n }\n }\n\n assert(Number.isFinite(vertexCount));\n return vertexCount;\n }\n}\n\nfunction convertToTopology(drawMode: GLTopology): PrimitiveTopology {\n switch (drawMode) {\n case GL.POINTS: return 'point-list'; // draw single points.\n case GL.LINES: return 'line-list'; // draw lines. Each vertex connects to the one after it.\n case GL.LINE_STRIP: return 'line-strip'; // draw a connected group of line segments from the first vertex to the last\n case GL.TRIANGLES: return 'triangle-list'; // draw triangles. Each set of three vertices creates a separate triangle.\n case GL.TRIANGLE_STRIP: return 'triangle-strip'; // draw a connected group of triangles.\n\n case GL.TRIANGLE_FAN: return 'triangle-fan'; // draw a connected group of triangles.\n case GL.LINE_LOOP: return 'line-loop'; // draw lines. Each set of two vertices is treated as a separate line segment.\n default:\n throw new Error(String(drawMode));\n }\n}\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -981,6 +981,7 @@ function getShaderSource(device, shader) {
981
981
  // src/lib/clip-space.ts
982
982
  var import_constants2 = __toESM(require("@luma.gl/constants"), 1);
983
983
  var import_api7 = require("@luma.gl/api");
984
+ var import_webgl = require("@luma.gl/webgl");
984
985
 
985
986
  // src/geometry/geometry.ts
986
987
  var import_api6 = require("@luma.gl/api");
@@ -1104,7 +1105,6 @@ function convertToTopology(drawMode) {
1104
1105
  }
1105
1106
 
1106
1107
  // src/lib/clip-space.ts
1107
- var import_webgl = require("@luma.gl/webgl/index");
1108
1108
  var CLIPSPACE_VERTEX_SHADER = import_api7.glsl`\
1109
1109
  attribute vec2 aClipSpacePosition;
1110
1110
  attribute vec2 aTexCoord;
package/dist/index.d.ts CHANGED
@@ -10,7 +10,7 @@ export type { ModelProps } from './lib/model';
10
10
  export { Model } from './lib/model';
11
11
  export { PipelineFactory } from './lib/pipeline-factory';
12
12
  export { ClipSpace } from './lib/clip-space';
13
- export { default as Geometry } from './geometry/geometry';
13
+ export { Geometry } from './geometry/geometry';
14
14
  export type { ConeGeometryProps } from './geometries/cone-geometry';
15
15
  export { ConeGeometry } from './geometries/cone-geometry';
16
16
  export type { CubeGeometryProps } from './geometries/cube-geometry';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,YAAY,EAAC,cAAc,EAAC,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAC,qBAAqB,EAAC,MAAM,8BAA8B,CAAC;AAEnE,YAAY,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAC,aAAa,EAAC,MAAM,iCAAiC,CAAC;AAE9D,YAAY,EAAC,sBAAsB,EAAC,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAC,iBAAiB,EAAC,MAAM,sCAAsC,CAAC;AAEvE,YAAY,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAElC,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAG3C,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAGxD,YAAY,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,YAAY,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,YAAY,EAAC,qBAAqB,EAAC,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAC;AAChE,YAAY,EAAC,sBAAsB,EAAC,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAC,iBAAiB,EAAC,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAC,kBAAkB,EAAC,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,YAAY,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,YAAY,EAAC,0BAA0B,EAAC,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAAC,qBAAqB,EAAC,MAAM,sCAAsC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,YAAY,EAAC,cAAc,EAAC,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAC,qBAAqB,EAAC,MAAM,8BAA8B,CAAC;AAEnE,YAAY,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAC,aAAa,EAAC,MAAM,iCAAiC,CAAC;AAE9D,YAAY,EAAC,sBAAsB,EAAC,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAC,iBAAiB,EAAC,MAAM,sCAAsC,CAAC;AAEvE,YAAY,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAElC,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAG3C,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAG7C,YAAY,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,YAAY,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,YAAY,EAAC,qBAAqB,EAAC,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAC;AAChE,YAAY,EAAC,sBAAsB,EAAC,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAC,iBAAiB,EAAC,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAC,kBAAkB,EAAC,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,YAAY,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,YAAY,EAAC,0BAA0B,EAAC,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAAC,qBAAqB,EAAC,MAAM,sCAAsC,CAAC"}
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ export { makeAnimationLoop } from "./animation-loop/make-animation-loop.js";
6
6
  export { Model } from "./lib/model.js";
7
7
  export { PipelineFactory } from "./lib/pipeline-factory.js";
8
8
  export { ClipSpace } from "./lib/clip-space.js";
9
- export { default as Geometry } from "./geometry/geometry.js";
9
+ export { Geometry } from "./geometry/geometry.js";
10
10
  export { ConeGeometry } from "./geometries/cone-geometry.js";
11
11
  export { CubeGeometry } from "./geometries/cube-geometry.js";
12
12
  export { CylinderGeometry } from "./geometries/cylinder-geometry.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Timeline","KeyFrames","AnimationLoopTemplate","AnimationLoop","makeAnimationLoop","Model","PipelineFactory","ClipSpace","default","Geometry","ConeGeometry","CubeGeometry","CylinderGeometry","IcoSphereGeometry","PlaneGeometry","SphereGeometry","TruncatedConeGeometry"],"sources":["../src/index.ts"],"sourcesContent":["// luma.gl Engine API\n\n// Animation\nexport {Timeline} from './animation/timeline';\nexport {KeyFrames} from './animation/key-frames';\nexport type {AnimationProps} from './animation-loop/animation-props';\n\nexport {AnimationLoopTemplate} from './animation-loop/render-loop';\n\nexport type {AnimationLoopProps} from './animation-loop/animation-loop';\nexport {AnimationLoop} from './animation-loop/animation-loop';\n\nexport type {MakeAnimationLoopProps} from './animation-loop/make-animation-loop';\nexport {makeAnimationLoop} from './animation-loop/make-animation-loop';\n\nexport type {ModelProps} from './lib/model';\nexport {Model} from './lib/model';\n\nexport {PipelineFactory} from './lib/pipeline-factory';\n\n// Utils\nexport {ClipSpace} from './lib/clip-space';\n\n// Geometries\nexport {default as Geometry} from './geometry/geometry';\n\n// Primitives\nexport type {ConeGeometryProps} from './geometries/cone-geometry';\nexport {ConeGeometry} from './geometries/cone-geometry';\nexport type {CubeGeometryProps} from './geometries/cube-geometry';\nexport {CubeGeometry} from './geometries/cube-geometry';\nexport type {CylinderGeometryProps} from './geometries/cylinder-geometry';\nexport {CylinderGeometry} from './geometries/cylinder-geometry';\nexport type {IcoSphereGeometryProps} from './geometries/ico-sphere-geometry';\nexport {IcoSphereGeometry} from './geometries/ico-sphere-geometry';\nexport type {PlaneGeometryProps} from './geometries/plane-geometry';\nexport {PlaneGeometry} from './geometries/plane-geometry';\nexport type {SphereGeometryProps} from './geometries/sphere-geometry';\nexport {SphereGeometry} from './geometries/sphere-geometry';\nexport type {TruncatedConeGeometryProps} from './geometries/truncated-cone-geometry';\nexport {TruncatedConeGeometry} from './geometries/truncated-cone-geometry';\n\n"],"mappings":"SAGQA,QAAQ;AAAA,SACRC,SAAS;AAAA,SAGTC,qBAAqB;AAAA,SAGrBC,aAAa;AAAA,SAGbC,iBAAiB;AAAA,SAGjBC,KAAK;AAAA,SAELC,eAAe;AAAA,SAGfC,SAAS;AAAA,SAGTC,OAAO,IAAIC,QAAQ;AAAA,SAInBC,YAAY;AAAA,SAEZC,YAAY;AAAA,SAEZC,gBAAgB;AAAA,SAEhBC,iBAAiB;AAAA,SAEjBC,aAAa;AAAA,SAEbC,cAAc;AAAA,SAEdC,qBAAqB"}
1
+ {"version":3,"file":"index.js","names":["Timeline","KeyFrames","AnimationLoopTemplate","AnimationLoop","makeAnimationLoop","Model","PipelineFactory","ClipSpace","Geometry","ConeGeometry","CubeGeometry","CylinderGeometry","IcoSphereGeometry","PlaneGeometry","SphereGeometry","TruncatedConeGeometry"],"sources":["../src/index.ts"],"sourcesContent":["// luma.gl Engine API\n\n// Animation\nexport {Timeline} from './animation/timeline';\nexport {KeyFrames} from './animation/key-frames';\nexport type {AnimationProps} from './animation-loop/animation-props';\n\nexport {AnimationLoopTemplate} from './animation-loop/render-loop';\n\nexport type {AnimationLoopProps} from './animation-loop/animation-loop';\nexport {AnimationLoop} from './animation-loop/animation-loop';\n\nexport type {MakeAnimationLoopProps} from './animation-loop/make-animation-loop';\nexport {makeAnimationLoop} from './animation-loop/make-animation-loop';\n\nexport type {ModelProps} from './lib/model';\nexport {Model} from './lib/model';\n\nexport {PipelineFactory} from './lib/pipeline-factory';\n\n// Utils\nexport {ClipSpace} from './lib/clip-space';\n\n// Geometries\nexport {Geometry} from './geometry/geometry';\n\n// Primitives\nexport type {ConeGeometryProps} from './geometries/cone-geometry';\nexport {ConeGeometry} from './geometries/cone-geometry';\nexport type {CubeGeometryProps} from './geometries/cube-geometry';\nexport {CubeGeometry} from './geometries/cube-geometry';\nexport type {CylinderGeometryProps} from './geometries/cylinder-geometry';\nexport {CylinderGeometry} from './geometries/cylinder-geometry';\nexport type {IcoSphereGeometryProps} from './geometries/ico-sphere-geometry';\nexport {IcoSphereGeometry} from './geometries/ico-sphere-geometry';\nexport type {PlaneGeometryProps} from './geometries/plane-geometry';\nexport {PlaneGeometry} from './geometries/plane-geometry';\nexport type {SphereGeometryProps} from './geometries/sphere-geometry';\nexport {SphereGeometry} from './geometries/sphere-geometry';\nexport type {TruncatedConeGeometryProps} from './geometries/truncated-cone-geometry';\nexport {TruncatedConeGeometry} from './geometries/truncated-cone-geometry';\n\n"],"mappings":"SAGQA,QAAQ;AAAA,SACRC,SAAS;AAAA,SAGTC,qBAAqB;AAAA,SAGrBC,aAAa;AAAA,SAGbC,iBAAiB;AAAA,SAGjBC,KAAK;AAAA,SAELC,eAAe;AAAA,SAGfC,SAAS;AAAA,SAGTC,QAAQ;AAAA,SAIRC,YAAY;AAAA,SAEZC,YAAY;AAAA,SAEZC,gBAAgB;AAAA,SAEhBC,iBAAiB;AAAA,SAEjBC,aAAa;AAAA,SAEbC,cAAc;AAAA,SAEdC,qBAAqB"}
@@ -1 +1 @@
1
- {"version":3,"file":"clip-space.d.ts","sourceRoot":"","sources":["../../src/lib/clip-space.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,MAAM,EAAO,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,KAAK,EAAE,UAAU,EAAC,MAAM,SAAS,CAAC;AAwB1C;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;gBACtB,MAAM,EAAE,MAAM,GAAG,qBAAqB,EAAE,IAAI,CAAC,EAAE,UAAU;CAqBtE"}
1
+ {"version":3,"file":"clip-space.d.ts","sourceRoot":"","sources":["../../src/lib/clip-space.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,MAAM,EAAO,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAC,KAAK,EAAE,UAAU,EAAC,MAAM,SAAS,CAAC;AAuB1C;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;gBACtB,MAAM,EAAE,MAAM,GAAG,qBAAqB,EAAE,IAAI,CAAC,EAAE,UAAU;CAqBtE"}
@@ -2,9 +2,9 @@ import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLit
2
2
  var _templateObject;
3
3
  import GL from '@luma.gl/constants';
4
4
  import { glsl } from '@luma.gl/api';
5
+ import { WebGLDevice } from '@luma.gl/webgl';
5
6
  import { Model } from "./model.js";
6
- import Geometry from "../geometry/geometry.js";
7
- import { WebGLDevice } from '@luma.gl/webgl/index';
7
+ import { Geometry } from "../geometry/geometry.js";
8
8
  const CLIPSPACE_VERTEX_SHADER = glsl(_templateObject || (_templateObject = _taggedTemplateLiteral(["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"], ["\\\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"])));
9
9
  const POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];
10
10
  export class ClipSpace extends Model {
@@ -1 +1 @@
1
- {"version":3,"file":"clip-space.js","names":["GL","glsl","Model","Geometry","WebGLDevice","CLIPSPACE_VERTEX_SHADER","_templateObject","_taggedTemplateLiteral","POSITIONS","ClipSpace","constructor","device","opts","TEX_COORDS","map","coord","attach","vs","vertexCount","geometry","drawMode","TRIANGLE_STRIP","attributes","aClipSpacePosition","size","value","Float32Array","aTexCoord","aCoordinate"],"sources":["../../src/lib/clip-space.ts"],"sourcesContent":["\n// ClipSpace\nimport GL from '@luma.gl/constants';\nimport {Device, glsl} from '@luma.gl/api';\nimport {Model, ModelProps} from './model';\nimport Geometry from '../geometry/geometry';\nimport {WebGLDevice} from '@luma.gl/webgl/index';\n\nconst CLIPSPACE_VERTEX_SHADER = glsl`\\\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/**\n * A flat geometry that covers the \"visible area\" that the GPU renders.\n */\nexport class ClipSpace extends Model {\n constructor(device: Device | WebGLRenderingContext, opts?: ModelProps) {\n const TEX_COORDS = POSITIONS.map((coord) => (coord === -1 ? 0 : coord));\n\n super(\n WebGLDevice.attach(device),\n {\n ...opts,\n vs: CLIPSPACE_VERTEX_SHADER,\n vertexCount: 4,\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 }\n}\n"],"mappings":";;AAEA,OAAOA,EAAE,MAAM,oBAAoB;AACnC,SAAgBC,IAAI,QAAO,cAAc;AAAC,SAClCC,KAAK;AAAA,OACNC,QAAQ;AACf,SAAQC,WAAW,QAAO,sBAAsB;AAEhD,MAAMC,uBAAuB,GAAGJ,IAAI,CAAAK,eAAA,KAAAA,eAAA,GAAAC,sBAAA,gpBAenC;AAGD,MAAMC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAK9C,OAAO,MAAMC,SAAS,SAASP,KAAK,CAAC;EACnCQ,WAAWA,CAACC,MAAsC,EAAEC,IAAiB,EAAE;IACrE,MAAMC,UAAU,GAAGL,SAAS,CAACM,GAAG,CAAEC,KAAK,IAAMA,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,GAAGA,KAAM,CAAC;IAEvE,KAAK,CACHX,WAAW,CAACY,MAAM,CAACL,MAAM,CAAC,EAC1B;MACE,GAAGC,IAAI;MACPK,EAAE,EAAEZ,uBAAuB;MAC3Ba,WAAW,EAAE,CAAC;MACdC,QAAQ,EAAE,IAAIhB,QAAQ,CAAC;QACrBiB,QAAQ,EAAEpB,EAAE,CAACqB,cAAc;QAC3BH,WAAW,EAAE,CAAC;QACdI,UAAU,EAAE;UACVC,kBAAkB,EAAE;YAACC,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAAClB,SAAS;UAAC,CAAC;UACjEmB,SAAS,EAAE;YAACH,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACb,UAAU;UAAC,CAAC;UACzDe,WAAW,EAAE;YAACJ,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACb,UAAU;UAAC;QAC5D;MACF,CAAC;IACH,CAAC,CACF;EACH;AACF"}
1
+ {"version":3,"file":"clip-space.js","names":["GL","glsl","WebGLDevice","Model","Geometry","CLIPSPACE_VERTEX_SHADER","_templateObject","_taggedTemplateLiteral","POSITIONS","ClipSpace","constructor","device","opts","TEX_COORDS","map","coord","attach","vs","vertexCount","geometry","drawMode","TRIANGLE_STRIP","attributes","aClipSpacePosition","size","value","Float32Array","aTexCoord","aCoordinate"],"sources":["../../src/lib/clip-space.ts"],"sourcesContent":["\n// ClipSpace\nimport GL from '@luma.gl/constants';\nimport {Device, glsl} from '@luma.gl/api';\nimport {WebGLDevice} from '@luma.gl/webgl';\nimport {Model, ModelProps} from './model';\nimport {Geometry} from '../geometry/geometry';\n\nconst CLIPSPACE_VERTEX_SHADER = glsl`\\\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/**\n * A flat geometry that covers the \"visible area\" that the GPU renders.\n */\nexport class ClipSpace extends Model {\n constructor(device: Device | WebGLRenderingContext, opts?: ModelProps) {\n const TEX_COORDS = POSITIONS.map((coord) => (coord === -1 ? 0 : coord));\n\n super(\n WebGLDevice.attach(device),\n {\n ...opts,\n vs: CLIPSPACE_VERTEX_SHADER,\n vertexCount: 4,\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 }\n}\n"],"mappings":";;AAEA,OAAOA,EAAE,MAAM,oBAAoB;AACnC,SAAgBC,IAAI,QAAO,cAAc;AACzC,SAAQC,WAAW,QAAO,gBAAgB;AAAC,SACnCC,KAAK;AAAA,SACLC,QAAQ;AAEhB,MAAMC,uBAAuB,GAAGJ,IAAI,CAAAK,eAAA,KAAAA,eAAA,GAAAC,sBAAA,gpBAenC;AAGD,MAAMC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAK9C,OAAO,MAAMC,SAAS,SAASN,KAAK,CAAC;EACnCO,WAAWA,CAACC,MAAsC,EAAEC,IAAiB,EAAE;IACrE,MAAMC,UAAU,GAAGL,SAAS,CAACM,GAAG,CAAEC,KAAK,IAAMA,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,GAAGA,KAAM,CAAC;IAEvE,KAAK,CACHb,WAAW,CAACc,MAAM,CAACL,MAAM,CAAC,EAC1B;MACE,GAAGC,IAAI;MACPK,EAAE,EAAEZ,uBAAuB;MAC3Ba,WAAW,EAAE,CAAC;MACdC,QAAQ,EAAE,IAAIf,QAAQ,CAAC;QACrBgB,QAAQ,EAAEpB,EAAE,CAACqB,cAAc;QAC3BH,WAAW,EAAE,CAAC;QACdI,UAAU,EAAE;UACVC,kBAAkB,EAAE;YAACC,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAAClB,SAAS;UAAC,CAAC;UACjEmB,SAAS,EAAE;YAACH,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACb,UAAU;UAAC,CAAC;UACzDe,WAAW,EAAE;YAACJ,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACb,UAAU;UAAC;QAC5D;MACF,CAAC;IACH,CAAC,CACF;EACH;AACF"}
@@ -1,5 +1,5 @@
1
1
  import { Device, Buffer } from '@luma.gl/api';
2
- import type Geometry from '../geometry/geometry';
2
+ import type { Geometry } from '../geometry/geometry';
3
3
  export declare function getIndexBufferFromGeometry(device: Device, geometry: Geometry): Buffer | undefined;
4
4
  export declare function getAttributeBuffersFromGeometry(device: Device, geometry: Geometry): Record<string, Buffer>;
5
5
  //# sourceMappingURL=model-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-utils.d.ts","sourceRoot":"","sources":["../../src/lib/model-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAS,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AAsDjD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAYjG;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc1G"}
1
+ {"version":3,"file":"model-utils.d.ts","sourceRoot":"","sources":["../../src/lib/model-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAS,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAsDnD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAYjG;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc1G"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-utils.js","names":["Buffer","assert","GLTF_TO_LUMA_ATTRIBUTE_MAP","POSITION","NORMAL","COLOR_0","TEXCOORD_0","TEXCOORD_1","TEXCOORD_2","getIndexBufferFromGeometry","device","geometry","indices","undefined","data","value","Uint16Array","Uint32Array","createBuffer","usage","INDEX","getAttributeBuffersFromGeometry","buffers","name","attribute","Object","entries","attributes","remappedName","mapAttributeName","constant","Error","typedArray","id","concat"],"sources":["../../src/lib/model-utils.ts"],"sourcesContent":["import {Device, Buffer, assert} from '@luma.gl/api';\nimport type Geometry from '../geometry/geometry';\n\n// Support for mapping new geometries with glTF attribute names to \"classic\" luma.gl shader names\nconst GLTF_TO_LUMA_ATTRIBUTE_MAP = {\n POSITION: 'positions',\n NORMAL: 'normals',\n COLOR_0: 'colors',\n TEXCOORD_0: 'texCoords',\n TEXCOORD_1: 'texCoords1',\n TEXCOORD_2: 'texCoords2'\n};\n\n/*\nexport function getAttributeLayoutsFromGeometry(geometry: Geometry) {\n const layouts: Record<string, {}> = {};\n let indices = geometry.indices;\n\n for (const [name, attribute] of Object.entries(geometry.attributes)) {\n const remappedName = mapAttributeName(name);\n\n if (attribute.constant) {\n throw new Error('constant attributes not supported');\n } else {\n const typedArray = attribute.value;\n // Create accessor by copying the attribute and removing `value``\n const accessor = {...attribute};\n delete accessor.value;\n buffers[remappedName] = [device.createBuffer(typedArray), accessor];\n\n inferAttributeAccessor(name, accessor);\n }\n }\n}\n\nexport class Table {\n length: number;\n // columns: Record<string, TypedArray> = {};\n}\n\nexport class GPUTable {\n length: number;\n columns: Record<string, Buffer> = {};\n}\n\nexport function convertTableToGPUTable(table: Table) {\n // for (const ) {}\n}\n\nexport function renameTableColumns(table: Table, map: (name: string) => string) {\n const newColumns = table.columns.reduce()\n table.clone();\n}\n*/\n\nexport function getIndexBufferFromGeometry(device: Device, geometry: Geometry): Buffer | undefined {\n if (!geometry.indices) {\n return undefined;\n }\n\n // @ts-expect-error\n const data = geometry.indices.value || geometry.indices;\n assert(\n data instanceof Uint16Array || data instanceof Uint32Array,\n 'attribute array for \"indices\" must be of integer type'\n );\n return device.createBuffer({usage: Buffer.INDEX, data});\n}\n\nexport function getAttributeBuffersFromGeometry(device: Device, geometry: Geometry): Record<string, Buffer> {\n const buffers: Record<string, Buffer> = {};\n\n for (const [name, attribute] of Object.entries(geometry.attributes)) {\n const remappedName = mapAttributeName(name);\n if (attribute?.constant) {\n throw new Error('constant attributes not supported');\n } else {\n const typedArray = attribute?.value;\n buffers[remappedName] = device.createBuffer({data: typedArray, id: `${remappedName}-buffer`});\n }\n }\n\n return buffers;\n}\n\nfunction mapAttributeName(name: string): string {\n // @ts-ignore-error\n return GLTF_TO_LUMA_ATTRIBUTE_MAP[name] || name;\n}\n\n/*\n// Check for well known attribute names\n// eslint-disable-next-line complexity\nexport function inferAttributeAccessor(attributeName, attribute) {\n let category;\n switch (attributeName) {\n case 'texCoords':\n case 'texCoord1':\n case 'texCoord2':\n case 'texCoord3':\n category = 'uvs';\n break;\n case 'vertices':\n case 'positions':\n case 'normals':\n case 'pickingColors':\n category = 'vectors';\n break;\n default:\n }\n\n // Check for categorys\n switch (category) {\n case 'vectors':\n attribute.size = attribute.size || 3;\n break;\n case 'uvs':\n attribute.size = attribute.size || 2;\n break;\n default:\n }\n\n assert(Number.isFinite(attribute.size), `attribute ${attributeName} needs size`);\n}\n*/\n"],"mappings":"AAAA,SAAgBA,MAAM,EAAEC,MAAM,QAAO,cAAc;AAInD,MAAMC,0BAA0B,GAAG;EACjCC,QAAQ,EAAE,WAAW;EACrBC,MAAM,EAAE,SAAS;EACjBC,OAAO,EAAE,QAAQ;EACjBC,UAAU,EAAE,WAAW;EACvBC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE;AACd,CAAC;AA4CD,OAAO,SAASC,0BAA0BA,CAACC,MAAc,EAAEC,QAAkB,EAAsB;EACjG,IAAI,CAACA,QAAQ,CAACC,OAAO,EAAE;IACrB,OAAOC,SAAS;EAClB;EAGA,MAAMC,IAAI,GAAGH,QAAQ,CAACC,OAAO,CAACG,KAAK,IAAIJ,QAAQ,CAACC,OAAO;EACvDX,MAAM,CACJa,IAAI,YAAYE,WAAW,IAAIF,IAAI,YAAYG,WAAW,EAC1D,uDAAuD,CACxD;EACD,OAAOP,MAAM,CAACQ,YAAY,CAAC;IAACC,KAAK,EAAEnB,MAAM,CAACoB,KAAK;IAAEN;EAAI,CAAC,CAAC;AACzD;AAEA,OAAO,SAASO,+BAA+BA,CAACX,MAAc,EAAEC,QAAkB,EAA0B;EAC1G,MAAMW,OAA+B,GAAG,CAAC,CAAC;EAE1C,KAAK,MAAM,CAACC,IAAI,EAAEC,SAAS,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACf,QAAQ,CAACgB,UAAU,CAAC,EAAE;IACnE,MAAMC,YAAY,GAAGC,gBAAgB,CAACN,IAAI,CAAC;IAC3C,IAAIC,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEM,QAAQ,EAAE;MACvB,MAAM,IAAIC,KAAK,CAAC,mCAAmC,CAAC;IACtD,CAAC,MAAM;MACL,MAAMC,UAAU,GAAGR,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAET,KAAK;MACnCO,OAAO,CAACM,YAAY,CAAC,GAAGlB,MAAM,CAACQ,YAAY,CAAC;QAACJ,IAAI,EAAEkB,UAAU;QAAEC,EAAE,KAAAC,MAAA,CAAKN,YAAY;MAAS,CAAC,CAAC;IAC/F;EACF;EAEA,OAAON,OAAO;AAChB;AAEA,SAASO,gBAAgBA,CAACN,IAAY,EAAU;EAE9C,OAAOrB,0BAA0B,CAACqB,IAAI,CAAC,IAAIA,IAAI;AACjD"}
1
+ {"version":3,"file":"model-utils.js","names":["Buffer","assert","GLTF_TO_LUMA_ATTRIBUTE_MAP","POSITION","NORMAL","COLOR_0","TEXCOORD_0","TEXCOORD_1","TEXCOORD_2","getIndexBufferFromGeometry","device","geometry","indices","undefined","data","value","Uint16Array","Uint32Array","createBuffer","usage","INDEX","getAttributeBuffersFromGeometry","buffers","name","attribute","Object","entries","attributes","remappedName","mapAttributeName","constant","Error","typedArray","id","concat"],"sources":["../../src/lib/model-utils.ts"],"sourcesContent":["import {Device, Buffer, assert} from '@luma.gl/api';\nimport type {Geometry} from '../geometry/geometry';\n\n// Support for mapping new geometries with glTF attribute names to \"classic\" luma.gl shader names\nconst GLTF_TO_LUMA_ATTRIBUTE_MAP = {\n POSITION: 'positions',\n NORMAL: 'normals',\n COLOR_0: 'colors',\n TEXCOORD_0: 'texCoords',\n TEXCOORD_1: 'texCoords1',\n TEXCOORD_2: 'texCoords2'\n};\n\n/*\nexport function getAttributeLayoutsFromGeometry(geometry: Geometry) {\n const layouts: Record<string, {}> = {};\n let indices = geometry.indices;\n\n for (const [name, attribute] of Object.entries(geometry.attributes)) {\n const remappedName = mapAttributeName(name);\n\n if (attribute.constant) {\n throw new Error('constant attributes not supported');\n } else {\n const typedArray = attribute.value;\n // Create accessor by copying the attribute and removing `value``\n const accessor = {...attribute};\n delete accessor.value;\n buffers[remappedName] = [device.createBuffer(typedArray), accessor];\n\n inferAttributeAccessor(name, accessor);\n }\n }\n}\n\nexport class Table {\n length: number;\n // columns: Record<string, TypedArray> = {};\n}\n\nexport class GPUTable {\n length: number;\n columns: Record<string, Buffer> = {};\n}\n\nexport function convertTableToGPUTable(table: Table) {\n // for (const ) {}\n}\n\nexport function renameTableColumns(table: Table, map: (name: string) => string) {\n const newColumns = table.columns.reduce()\n table.clone();\n}\n*/\n\nexport function getIndexBufferFromGeometry(device: Device, geometry: Geometry): Buffer | undefined {\n if (!geometry.indices) {\n return undefined;\n }\n\n // @ts-expect-error\n const data = geometry.indices.value || geometry.indices;\n assert(\n data instanceof Uint16Array || data instanceof Uint32Array,\n 'attribute array for \"indices\" must be of integer type'\n );\n return device.createBuffer({usage: Buffer.INDEX, data});\n}\n\nexport function getAttributeBuffersFromGeometry(device: Device, geometry: Geometry): Record<string, Buffer> {\n const buffers: Record<string, Buffer> = {};\n\n for (const [name, attribute] of Object.entries(geometry.attributes)) {\n const remappedName = mapAttributeName(name);\n if (attribute?.constant) {\n throw new Error('constant attributes not supported');\n } else {\n const typedArray = attribute?.value;\n buffers[remappedName] = device.createBuffer({data: typedArray, id: `${remappedName}-buffer`});\n }\n }\n\n return buffers;\n}\n\nfunction mapAttributeName(name: string): string {\n // @ts-ignore-error\n return GLTF_TO_LUMA_ATTRIBUTE_MAP[name] || name;\n}\n\n/*\n// Check for well known attribute names\n// eslint-disable-next-line complexity\nexport function inferAttributeAccessor(attributeName, attribute) {\n let category;\n switch (attributeName) {\n case 'texCoords':\n case 'texCoord1':\n case 'texCoord2':\n case 'texCoord3':\n category = 'uvs';\n break;\n case 'vertices':\n case 'positions':\n case 'normals':\n case 'pickingColors':\n category = 'vectors';\n break;\n default:\n }\n\n // Check for categorys\n switch (category) {\n case 'vectors':\n attribute.size = attribute.size || 3;\n break;\n case 'uvs':\n attribute.size = attribute.size || 2;\n break;\n default:\n }\n\n assert(Number.isFinite(attribute.size), `attribute ${attributeName} needs size`);\n}\n*/\n"],"mappings":"AAAA,SAAgBA,MAAM,EAAEC,MAAM,QAAO,cAAc;AAInD,MAAMC,0BAA0B,GAAG;EACjCC,QAAQ,EAAE,WAAW;EACrBC,MAAM,EAAE,SAAS;EACjBC,OAAO,EAAE,QAAQ;EACjBC,UAAU,EAAE,WAAW;EACvBC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE;AACd,CAAC;AA4CD,OAAO,SAASC,0BAA0BA,CAACC,MAAc,EAAEC,QAAkB,EAAsB;EACjG,IAAI,CAACA,QAAQ,CAACC,OAAO,EAAE;IACrB,OAAOC,SAAS;EAClB;EAGA,MAAMC,IAAI,GAAGH,QAAQ,CAACC,OAAO,CAACG,KAAK,IAAIJ,QAAQ,CAACC,OAAO;EACvDX,MAAM,CACJa,IAAI,YAAYE,WAAW,IAAIF,IAAI,YAAYG,WAAW,EAC1D,uDAAuD,CACxD;EACD,OAAOP,MAAM,CAACQ,YAAY,CAAC;IAACC,KAAK,EAAEnB,MAAM,CAACoB,KAAK;IAAEN;EAAI,CAAC,CAAC;AACzD;AAEA,OAAO,SAASO,+BAA+BA,CAACX,MAAc,EAAEC,QAAkB,EAA0B;EAC1G,MAAMW,OAA+B,GAAG,CAAC,CAAC;EAE1C,KAAK,MAAM,CAACC,IAAI,EAAEC,SAAS,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACf,QAAQ,CAACgB,UAAU,CAAC,EAAE;IACnE,MAAMC,YAAY,GAAGC,gBAAgB,CAACN,IAAI,CAAC;IAC3C,IAAIC,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEM,QAAQ,EAAE;MACvB,MAAM,IAAIC,KAAK,CAAC,mCAAmC,CAAC;IACtD,CAAC,MAAM;MACL,MAAMC,UAAU,GAAGR,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAET,KAAK;MACnCO,OAAO,CAACM,YAAY,CAAC,GAAGlB,MAAM,CAACQ,YAAY,CAAC;QAACJ,IAAI,EAAEkB,UAAU;QAAEC,EAAE,KAAAC,MAAA,CAAKN,YAAY;MAAS,CAAC,CAAC;IAC/F;EACF;EAEA,OAAON,OAAO;AAChB;AAEA,SAASO,gBAAgBA,CAACN,IAAY,EAAU;EAE9C,OAAOrB,0BAA0B,CAACqB,IAAI,CAAC,IAAIA,IAAI;AACjD"}
@@ -1,7 +1,7 @@
1
1
  import type { Device, Buffer, RenderPipelineProps, RenderPass, Binding, PrimitiveTopology } from '@luma.gl/api';
2
2
  import { RenderPipeline } from '@luma.gl/api';
3
3
  import type { ShaderModule } from '@luma.gl/shadertools';
4
- import type Geometry from '../geometry/geometry';
4
+ import type { Geometry } from '../geometry/geometry';
5
5
  export declare type ModelProps = Omit<RenderPipelineProps, 'vs' | 'fs'> & {
6
6
  vs?: {
7
7
  glsl?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/lib/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAC9G,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AAIjD,oBAAY,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG;IAEhE,EAAE,CAAC,EAAE;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACpD,EAAE,CAAC,EAAE;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACpD,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC5B,CAAC;AAcF,aAAa;AACb,qBAAa,KAAK;IAChB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,WAAW,SAAC;IACrB,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE5B,OAAO,CAAC,kBAAkB,CAAuE;gBAErF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU;IA2C7C,OAAO,IAAI,IAAI;IAIf,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IASnC,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAmBjC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAMtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMrC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAMvD,uBAAuB;IACvB,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAMpD,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAMhD,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CAWvC"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/lib/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAC9G,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAInD,oBAAY,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG;IAEhE,EAAE,CAAC,EAAE;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACpD,EAAE,CAAC,EAAE;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACpD,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC5B,CAAC;AAcF,aAAa;AACb,qBAAa,KAAK;IAChB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,WAAW,SAAC;IACrB,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE5B,OAAO,CAAC,kBAAkB,CAAuE;gBAErF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU;IA2C7C,OAAO,IAAI,IAAI;IAIf,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IASnC,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAmBjC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAMtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMrC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAMvD,uBAAuB;IACvB,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAMpD,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAMhD,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CAWvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","names":["RenderPipeline","getAttributeBuffersFromGeometry","getIndexBufferFromGeometry","PipelineFactory","DEFAULT_MODEL_PROPS","_DEFAULT_PROPS","vs","fs","id","handle","undefined","userData","modules","moduleSettings","geometry","Model","constructor","device","props","_defineProperty","Error","getShaderSource","vertexCount","topology","pipelineFactory","getDefaultPipelineFactory","pipeline","getUniforms","createRenderPipeline","parameters","layout","_getModuleUniforms","_setGeometry","setUniforms","setProps","destroy","draw","renderPass","instanceCount","indices","setIndexBuffer","attributes","setAttributes","bindings","setBindings","uniforms","updateModuleSettings","Object","assign","geometryBuffers","indexBuffer","shader","info","type","wgsl","glsl"],"sources":["../../src/lib/model.ts"],"sourcesContent":["// luma.gl, MIT license\n\nimport type {Device, Buffer, RenderPipelineProps, RenderPass, Binding, PrimitiveTopology} from '@luma.gl/api';\nimport {RenderPipeline} from '@luma.gl/api';\nimport type { ShaderModule } from '@luma.gl/shadertools';\nimport type Geometry from '../geometry/geometry';\nimport {getAttributeBuffersFromGeometry, getIndexBufferFromGeometry} from './model-utils';\nimport {PipelineFactory} from './pipeline-factory';\n\nexport type ModelProps = Omit<RenderPipelineProps, 'vs' | 'fs'> & {\n // Model also accepts a string\n vs?: {glsl?: string; wgsl?: string} | string | null;\n fs?: {glsl?: string; wgsl?: string} | string | null;\n modules?: ShaderModule[];\n moduleSettings?: Record<string, Record<string, any>>;\n geometry?: Geometry | null;\n};\n\nconst DEFAULT_MODEL_PROPS: Required<ModelProps> = {\n ...RenderPipeline._DEFAULT_PROPS,\n vs: null,\n fs: null,\n id: 'unnamed',\n handle: undefined,\n userData: {},\n modules: [],\n moduleSettings: {},\n geometry: null\n};\n\n/** v9 API */\nexport class Model {\n readonly device: Device;\n readonly pipeline: RenderPipeline;\n readonly id: string;\n readonly vs: string;\n readonly fs: string | null = null;\n readonly topology: PrimitiveTopology;\n readonly vertexCount;\n props: Required<ModelProps>;\n\n private _getModuleUniforms: (props?: Record<string, Record<string, any>>) => Record<string, any>;\n\n constructor(device: Device, props: ModelProps) {\n this.props = {...DEFAULT_MODEL_PROPS, ...props};\n props = this.props;\n this.id = this.props.id;\n this.device = device;\n\n // Create the pipeline\n if (!props.vs) {\n throw new Error('no vertex shader');\n }\n this.vs = getShaderSource(this.device, props.vs);\n if (props.fs) {\n this.fs = getShaderSource(this.device, props.fs);\n }\n\n this.vertexCount = this.props.vertexCount;\n this.topology = this.props.topology;\n\n if (this.props.geometry) {\n this.vertexCount = this.props.geometry.vertexCount;\n this.topology = this.props.geometry.topology || 'triangle-list';\n }\n\n const pipelineFactory = PipelineFactory.getDefaultPipelineFactory(this.device);\n const {pipeline, getUniforms} = pipelineFactory.createRenderPipeline({\n ...this.props,\n vs: this.vs,\n fs: this.fs,\n topology: this.topology,\n parameters: props.parameters,\n layout: props.layout\n });\n\n this.pipeline = pipeline;\n this._getModuleUniforms = getUniforms;\n\n if (this.props.geometry) {\n this._setGeometry(this.props.geometry);\n }\n this.setUniforms(this._getModuleUniforms()) // Get all default module uniforms\n this.setProps(this.props);\n }\n\n destroy(): void {\n this.pipeline.destroy();\n }\n\n draw(renderPass?: RenderPass): this {\n this.pipeline.draw({\n renderPass,\n vertexCount: this.vertexCount,\n instanceCount: this.props.instanceCount\n });\n return this;\n }\n\n setProps(props: ModelProps): this {\n if (props.indices) {\n this.setIndexBuffer(props.indices);\n }\n if (props.attributes) {\n this.setAttributes(props.attributes);\n }\n if (props.bindings) {\n this.setBindings(props.bindings);\n }\n if (props.uniforms) {\n this.setUniforms(props.uniforms);\n }\n if (props.moduleSettings) {\n this.updateModuleSettings(props.moduleSettings);\n }\n return this;\n }\n\n updateModuleSettings(props: Record<string, any>): this {\n const uniforms = this._getModuleUniforms(props);\n this.setUniforms(uniforms);\n return this;\n }\n\n setIndexBuffer(indices: Buffer): this {\n this.pipeline.setIndexBuffer(indices);\n // this._indices = indices;\n return this;\n }\n\n setAttributes(attributes: Record<string, Buffer>): this {\n this.pipeline.setAttributes(attributes);\n Object.assign(this.props.attributes, attributes);\n return this;\n }\n\n /** Set the bindings */\n setBindings(bindings: Record<string, Binding>): this {\n this.pipeline.setBindings(bindings);\n Object.assign(this.props.bindings, bindings);\n return this;\n }\n\n setUniforms(uniforms: Record<string, any>): this {\n this.pipeline.setUniforms(uniforms);\n Object.assign(this.props.uniforms, uniforms);\n return this;\n }\n\n _setGeometry(geometry: Geometry): void {\n // this._deleteGeometryBuffers();\n\n const geometryBuffers = getAttributeBuffersFromGeometry(this.device, geometry);\n this.setAttributes(geometryBuffers);\n\n const indexBuffer = getIndexBufferFromGeometry(this.device, geometry);\n if (indexBuffer) {\n this.setIndexBuffer(indexBuffer);\n }\n }\n}\n\n/** Create a shader from the different overloads */\nfunction getShaderSource(device: Device, shader: string | {glsl?: string; wgsl?: string}): string {\n // TODO - detect WGSL/GLSL and throw an error if not supported\n if (typeof shader === 'string') {\n return shader;\n }\n\n switch (device.info.type) {\n case 'webgpu':\n if (shader?.wgsl) {\n return shader.wgsl;\n }\n throw new Error('WebGPU does not support GLSL shaders');\n\n default:\n if (shader?.glsl) {\n return shader.glsl;\n }\n throw new Error('WebGL does not support WGSL shaders');\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"model.js","names":["RenderPipeline","getAttributeBuffersFromGeometry","getIndexBufferFromGeometry","PipelineFactory","DEFAULT_MODEL_PROPS","_DEFAULT_PROPS","vs","fs","id","handle","undefined","userData","modules","moduleSettings","geometry","Model","constructor","device","props","_defineProperty","Error","getShaderSource","vertexCount","topology","pipelineFactory","getDefaultPipelineFactory","pipeline","getUniforms","createRenderPipeline","parameters","layout","_getModuleUniforms","_setGeometry","setUniforms","setProps","destroy","draw","renderPass","instanceCount","indices","setIndexBuffer","attributes","setAttributes","bindings","setBindings","uniforms","updateModuleSettings","Object","assign","geometryBuffers","indexBuffer","shader","info","type","wgsl","glsl"],"sources":["../../src/lib/model.ts"],"sourcesContent":["// luma.gl, MIT license\n\nimport type {Device, Buffer, RenderPipelineProps, RenderPass, Binding, PrimitiveTopology} from '@luma.gl/api';\nimport {RenderPipeline} from '@luma.gl/api';\nimport type { ShaderModule } from '@luma.gl/shadertools';\nimport type {Geometry} from '../geometry/geometry';\nimport {getAttributeBuffersFromGeometry, getIndexBufferFromGeometry} from './model-utils';\nimport {PipelineFactory} from './pipeline-factory';\n\nexport type ModelProps = Omit<RenderPipelineProps, 'vs' | 'fs'> & {\n // Model also accepts a string\n vs?: {glsl?: string; wgsl?: string} | string | null;\n fs?: {glsl?: string; wgsl?: string} | string | null;\n modules?: ShaderModule[];\n moduleSettings?: Record<string, Record<string, any>>;\n geometry?: Geometry | null;\n};\n\nconst DEFAULT_MODEL_PROPS: Required<ModelProps> = {\n ...RenderPipeline._DEFAULT_PROPS,\n vs: null,\n fs: null,\n id: 'unnamed',\n handle: undefined,\n userData: {},\n modules: [],\n moduleSettings: {},\n geometry: null\n};\n\n/** v9 API */\nexport class Model {\n readonly device: Device;\n readonly pipeline: RenderPipeline;\n readonly id: string;\n readonly vs: string;\n readonly fs: string | null = null;\n readonly topology: PrimitiveTopology;\n readonly vertexCount;\n props: Required<ModelProps>;\n\n private _getModuleUniforms: (props?: Record<string, Record<string, any>>) => Record<string, any>;\n\n constructor(device: Device, props: ModelProps) {\n this.props = {...DEFAULT_MODEL_PROPS, ...props};\n props = this.props;\n this.id = this.props.id;\n this.device = device;\n\n // Create the pipeline\n if (!props.vs) {\n throw new Error('no vertex shader');\n }\n this.vs = getShaderSource(this.device, props.vs);\n if (props.fs) {\n this.fs = getShaderSource(this.device, props.fs);\n }\n\n this.vertexCount = this.props.vertexCount;\n this.topology = this.props.topology;\n\n if (this.props.geometry) {\n this.vertexCount = this.props.geometry.vertexCount;\n this.topology = this.props.geometry.topology || 'triangle-list';\n }\n\n const pipelineFactory = PipelineFactory.getDefaultPipelineFactory(this.device);\n const {pipeline, getUniforms} = pipelineFactory.createRenderPipeline({\n ...this.props,\n vs: this.vs,\n fs: this.fs,\n topology: this.topology,\n parameters: props.parameters,\n layout: props.layout\n });\n\n this.pipeline = pipeline;\n this._getModuleUniforms = getUniforms;\n\n if (this.props.geometry) {\n this._setGeometry(this.props.geometry);\n }\n this.setUniforms(this._getModuleUniforms()) // Get all default module uniforms\n this.setProps(this.props);\n }\n\n destroy(): void {\n this.pipeline.destroy();\n }\n\n draw(renderPass?: RenderPass): this {\n this.pipeline.draw({\n renderPass,\n vertexCount: this.vertexCount,\n instanceCount: this.props.instanceCount\n });\n return this;\n }\n\n setProps(props: ModelProps): this {\n if (props.indices) {\n this.setIndexBuffer(props.indices);\n }\n if (props.attributes) {\n this.setAttributes(props.attributes);\n }\n if (props.bindings) {\n this.setBindings(props.bindings);\n }\n if (props.uniforms) {\n this.setUniforms(props.uniforms);\n }\n if (props.moduleSettings) {\n this.updateModuleSettings(props.moduleSettings);\n }\n return this;\n }\n\n updateModuleSettings(props: Record<string, any>): this {\n const uniforms = this._getModuleUniforms(props);\n this.setUniforms(uniforms);\n return this;\n }\n\n setIndexBuffer(indices: Buffer): this {\n this.pipeline.setIndexBuffer(indices);\n // this._indices = indices;\n return this;\n }\n\n setAttributes(attributes: Record<string, Buffer>): this {\n this.pipeline.setAttributes(attributes);\n Object.assign(this.props.attributes, attributes);\n return this;\n }\n\n /** Set the bindings */\n setBindings(bindings: Record<string, Binding>): this {\n this.pipeline.setBindings(bindings);\n Object.assign(this.props.bindings, bindings);\n return this;\n }\n\n setUniforms(uniforms: Record<string, any>): this {\n this.pipeline.setUniforms(uniforms);\n Object.assign(this.props.uniforms, uniforms);\n return this;\n }\n\n _setGeometry(geometry: Geometry): void {\n // this._deleteGeometryBuffers();\n\n const geometryBuffers = getAttributeBuffersFromGeometry(this.device, geometry);\n this.setAttributes(geometryBuffers);\n\n const indexBuffer = getIndexBufferFromGeometry(this.device, geometry);\n if (indexBuffer) {\n this.setIndexBuffer(indexBuffer);\n }\n }\n}\n\n/** Create a shader from the different overloads */\nfunction getShaderSource(device: Device, shader: string | {glsl?: string; wgsl?: string}): string {\n // TODO - detect WGSL/GLSL and throw an error if not supported\n if (typeof shader === 'string') {\n return shader;\n }\n\n switch (device.info.type) {\n case 'webgpu':\n if (shader?.wgsl) {\n return shader.wgsl;\n }\n throw new Error('WebGPU does not support GLSL shaders');\n\n default:\n if (shader?.glsl) {\n return shader.glsl;\n }\n throw new Error('WebGL does not support WGSL shaders');\n }\n}\n"],"mappings":"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"}