@luma.gl/engine 9.0.0-alpha.33 → 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 (39) 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 +88 -96
  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.js +8 -9
  13. package/dist/geometry/geometry.js.map +1 -1
  14. package/dist/geometry/gpu-geometry.d.ts +4 -15
  15. package/dist/geometry/gpu-geometry.d.ts.map +1 -1
  16. package/dist/geometry/gpu-geometry.js +27 -62
  17. package/dist/geometry/gpu-geometry.js.map +1 -1
  18. package/dist/index.cjs +28 -44
  19. package/dist/lib/clip-space.js +16 -3
  20. package/dist/lib/clip-space.js.map +1 -1
  21. package/dist/lib/pipeline-factory.d.ts.map +1 -1
  22. package/dist/lib/pipeline-factory.js +15 -11
  23. package/dist/lib/pipeline-factory.js.map +1 -1
  24. package/dist/model/model.d.ts.map +1 -1
  25. package/dist/model/model.js +27 -34
  26. package/dist/model/model.js.map +1 -1
  27. package/dist/scenegraph/group-node.js +1 -2
  28. package/dist/scenegraph/group-node.js.map +1 -1
  29. package/dist/scenegraph/model-node.js +3 -4
  30. package/dist/scenegraph/model-node.js.map +1 -1
  31. package/dist/scenegraph/scenegraph-node.js +9 -10
  32. package/dist/scenegraph/scenegraph-node.js.map +1 -1
  33. package/dist/transform/transform.js +4 -5
  34. package/dist/transform/transform.js.map +1 -1
  35. package/dist.min.js +75 -75
  36. package/package.json +6 -6
  37. package/src/geometry/gpu-geometry.ts +18 -52
  38. package/src/lib/pipeline-factory.ts +13 -10
  39. package/src/model/model.ts +3 -12
@@ -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":"AAAA,SAAQA,GAAG,QAAO,eAAe;AAAC,SAC1BC,QAAQ;AAAA,SACRC,qBAAqB;AAW7B,OAAO,MAAMC,aAAa,SAASF,QAAQ,CAAC;EAC1CG,WAAWA,CAAA,EAAiC;IAAA,IAAhCC,KAAyB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IACxC,MAAM;MAACG,EAAE,GAAGT,GAAG,CAAC,gBAAgB;IAAC,CAAC,GAAGK,KAAK;IAE1C,MAAM;MAACK,OAAO;MAAEC;IAAU,CAAC,GAAGC,cAAc,CAACP,KAAK,CAAC;IACnD,KAAK,CAAC;MACJ,GAAGA,KAAK;MACRI,EAAE;MACFI,QAAQ,EAAE,eAAe;MACzBH,OAAO;MACPC,UAAU,EAAE;QAAC,GAAGA,UAAU;QAAE,GAAGN,KAAK,CAACM;MAAU;IACjD,CAAC,CAAC;EACJ;AACF;AAGA,SAASC,cAAcA,CAACP,KAAU,EAAE;EAClC,MAAM;IAACS,IAAI,GAAG,KAAK;IAAEC,MAAM,GAAG,CAAC;IAAEC,QAAQ,GAAG,KAAK;IAAEC,MAAM,GAAG;EAAK,CAAC,GAAGZ,KAAK;EAE1E,MAAMa,MAAM,GAAGJ,IAAI,CAACK,KAAK,CAAC,GAAG,CAAC;EAE9B,IAAIC,KAAK,GAAGf,KAAK,CAAE,GAAEa,MAAM,CAAC,CAAC,CAAE,KAAI,CAAC,IAAI,CAAC;EACzC,MAAMG,KAAK,GAAGhB,KAAK,CAAE,GAAEa,MAAM,CAAC,CAAC,CAAE,KAAI,CAAC,IAAI,CAAC;EAE3C,MAAMI,aAAa,GAAGjB,KAAK,CAAE,IAAGa,MAAM,CAAC,CAAC,CAAE,EAAC,CAAC,IAAI,CAAC;EACjD,MAAMK,aAAa,GAAGlB,KAAK,CAAE,IAAGa,MAAM,CAAC,CAAC,CAAE,EAAC,CAAC,IAAI,CAAC;EACjD,MAAMM,WAAW,GAAG,CAACF,aAAa,GAAG,CAAC,KAAKC,aAAa,GAAG,CAAC,CAAC;EAE7D,MAAME,SAAS,GAAG,IAAIC,YAAY,CAACF,WAAW,GAAG,CAAC,CAAC;EACnD,MAAMG,OAAO,GAAG,IAAID,YAAY,CAACF,WAAW,GAAG,CAAC,CAAC;EACjD,MAAMI,SAAS,GAAG,IAAIF,YAAY,CAACF,WAAW,GAAG,CAAC,CAAC;EAEnD,IAAIR,QAAQ,EAAE;IACZI,KAAK,GAAG,CAACA,KAAK;EAChB;EAEA,IAAIS,EAAE,GAAG,CAAC;EACV,IAAIC,EAAE,GAAG,CAAC;EACV,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIR,aAAa,EAAEQ,CAAC,EAAE,EAAE;IACvC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIV,aAAa,EAAEU,CAAC,EAAE,EAAE;MACvC,MAAMC,CAAC,GAAGD,CAAC,GAAGV,aAAa;MAC3B,MAAMY,CAAC,GAAGH,CAAC,GAAGR,aAAa;MAC3BK,SAAS,CAACC,EAAE,GAAG,CAAC,CAAC,GAAGb,QAAQ,GAAG,CAAC,GAAGiB,CAAC,GAAGA,CAAC;MACxCL,SAAS,CAACC,EAAE,GAAG,CAAC,CAAC,GAAGK,CAAC;MAErB,QAAQpB,IAAI;QACV,KAAK,KAAK;UACRW,SAAS,CAACK,EAAE,GAAG,CAAC,CAAC,GAAGV,KAAK,GAAGa,CAAC,GAAGb,KAAK,GAAG,GAAG;UAC3CK,SAAS,CAACK,EAAE,GAAG,CAAC,CAAC,GAAGT,KAAK,GAAGa,CAAC,GAAGb,KAAK,GAAG,GAAG;UAC3CI,SAAS,CAACK,EAAE,GAAG,CAAC,CAAC,GAAGf,MAAM;UAE1BY,OAAO,CAACG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;UACnBH,OAAO,CAACG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;UACnBH,OAAO,CAACG,EAAE,GAAG,CAAC,CAAC,GAAGd,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;UACnC;QAEF,KAAK,KAAK;UACRS,SAAS,CAACK,EAAE,GAAG,CAAC,CAAC,GAAGV,KAAK,GAAGa,CAAC,GAAGb,KAAK,GAAG,GAAG;UAC3CK,SAAS,CAACK,EAAE,GAAG,CAAC,CAAC,GAAGf,MAAM;UAC1BU,SAAS,CAACK,EAAE,GAAG,CAAC,CAAC,GAAGT,KAAK,GAAGa,CAAC,GAAGb,KAAK,GAAG,GAAG;UAE3CM,OAAO,CAACG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;UACnBH,OAAO,CAACG,EAAE,GAAG,CAAC,CAAC,GAAGd,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;UACnCW,OAAO,CAACG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;UACnB;QAEF,KAAK,KAAK;UACRL,SAAS,CAACK,EAAE,GAAG,CAAC,CAAC,GAAGf,MAAM;UAC1BU,SAAS,CAACK,EAAE,GAAG,CAAC,CAAC,GAAGV,KAAK,GAAGa,CAAC,GAAGb,KAAK,GAAG,GAAG;UAC3CK,SAAS,CAACK,EAAE,GAAG,CAAC,CAAC,GAAGT,KAAK,GAAGa,CAAC,GAAGb,KAAK,GAAG,GAAG;UAE3CM,OAAO,CAACG,EAAE,GAAG,CAAC,CAAC,GAAGd,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;UACnCW,OAAO,CAACG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;UACnBH,OAAO,CAACG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;UACnB;QAEF;UACE,MAAM,IAAIK,KAAK,CAAC,6BAA6B,CAAC;MAClD;MAEAN,EAAE,IAAI,CAAC;MACPC,EAAE,IAAI,CAAC;IACT;EACF;EAEA,MAAMM,cAAc,GAAGd,aAAa,GAAG,CAAC;EACxC,MAAMZ,OAAO,GAAG,IAAI2B,WAAW,CAACf,aAAa,GAAGC,aAAa,GAAG,CAAC,CAAC;EAElE,KAAK,IAAIQ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,aAAa,EAAEQ,CAAC,EAAE,EAAE;IACtC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGV,aAAa,EAAEU,CAAC,EAAE,EAAE;MACtC,MAAMM,KAAK,GAAG,CAACP,CAAC,GAAGT,aAAa,GAAGU,CAAC,IAAI,CAAC;MAEzCtB,OAAO,CAAC4B,KAAK,GAAG,CAAC,CAAC,GAAG,CAACP,CAAC,GAAG,CAAC,IAAIK,cAAc,GAAGJ,CAAC;MACjDtB,OAAO,CAAC4B,KAAK,GAAG,CAAC,CAAC,GAAG,CAACP,CAAC,GAAG,CAAC,IAAIK,cAAc,GAAGJ,CAAC;MACjDtB,OAAO,CAAC4B,KAAK,GAAG,CAAC,CAAC,GAAG,CAACP,CAAC,GAAG,CAAC,IAAIK,cAAc,GAAGJ,CAAC,GAAG,CAAC;MAGrDtB,OAAO,CAAC4B,KAAK,GAAG,CAAC,CAAC,GAAG,CAACP,CAAC,GAAG,CAAC,IAAIK,cAAc,GAAGJ,CAAC;MACjDtB,OAAO,CAAC4B,KAAK,GAAG,CAAC,CAAC,GAAG,CAACP,CAAC,GAAG,CAAC,IAAIK,cAAc,GAAGJ,CAAC,GAAG,CAAC;MACrDtB,OAAO,CAAC4B,KAAK,GAAG,CAAC,CAAC,GAAG,CAACP,CAAC,GAAG,CAAC,IAAIK,cAAc,GAAGJ,CAAC,GAAG,CAAC;IACvD;EACF;EAEA,MAAMO,QAAQ,GAAG;IACf7B,OAAO,EAAE;MAAC8B,IAAI,EAAE,CAAC;MAAEC,KAAK,EAAE/B;IAAO,CAAC;IAClCC,UAAU,EAAE;MACV+B,QAAQ,EAAE;QAACF,IAAI,EAAE,CAAC;QAAEC,KAAK,EAAEhB;MAAS,CAAC;MACrCkB,MAAM,EAAE;QAACH,IAAI,EAAE,CAAC;QAAEC,KAAK,EAAEd;MAAO,CAAC;MACjCiB,UAAU,EAAE;QAACJ,IAAI,EAAE,CAAC;QAAEC,KAAK,EAAEb;MAAS;IACxC;EACF,CAAC;EAGD,OAAOX,MAAM,GAAGf,qBAAqB,CAACqC,QAAQ,CAAC,GAAGA,QAAQ;AAC5D"}
@@ -1,13 +1,12 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  import { uid, assert } from '@luma.gl/core';
3
2
  export class Geometry {
4
3
  constructor(props) {
5
- _defineProperty(this, "id", void 0);
6
- _defineProperty(this, "topology", void 0);
7
- _defineProperty(this, "vertexCount", void 0);
8
- _defineProperty(this, "indices", void 0);
9
- _defineProperty(this, "attributes", void 0);
10
- _defineProperty(this, "userData", {});
4
+ this.id = void 0;
5
+ this.topology = void 0;
6
+ this.vertexCount = void 0;
7
+ this.indices = void 0;
8
+ this.attributes = void 0;
9
+ this.userData = {};
11
10
  const {
12
11
  attributes = {},
13
12
  indices = null,
@@ -26,7 +25,7 @@ export class Geometry {
26
25
  const attribute = ArrayBuffer.isView(attributeValue) ? {
27
26
  value: attributeValue
28
27
  } : attributeValue;
29
- assert(ArrayBuffer.isView(attribute.value), "".concat(this._print(attributeName), ": must be typed array or object with value as typed array"));
28
+ assert(ArrayBuffer.isView(attribute.value), `${this._print(attributeName)}: must be typed array or object with value as typed array`);
30
29
  if ((attributeName === 'POSITION' || attributeName === 'positions') && !attribute.size) {
31
30
  attribute.size = 3;
32
31
  }
@@ -53,7 +52,7 @@ export class Geometry {
53
52
  } : this.attributes;
54
53
  }
55
54
  _print(attributeName) {
56
- return "Geometry ".concat(this.id, " attribute ").concat(attributeName);
55
+ return `Geometry ${this.id} attribute ${attributeName}`;
57
56
  }
58
57
  _setAttributes(attributes, indices) {
59
58
  return this;
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.js","names":["uid","assert","Geometry","constructor","props","_defineProperty","attributes","indices","vertexCount","id","topology","ArrayBuffer","isView","value","size","attributeName","attributeValue","Object","entries","attribute","concat","_print","isIndexed","undefined","assign","_calculateVertexCount","getVertexCount","getAttributes","_setAttributes","length","Infinity","values","constant","Math","min","Number","isFinite"],"sources":["../../src/geometry/geometry.ts"],"sourcesContent":["// luma.gl, MIT license\nimport type {PrimitiveTopology, TypedArray} from '@luma.gl/core';\nimport {uid, assert} from '@luma.gl/core';\n\nexport type GeometryProps = {\n id?: string;\n /** Determines how vertices are read from the 'vertex' attributes */\n topology:\n | 'point-list'\n | 'line-list'\n | 'line-strip'\n | 'line-loop-webgl'\n | 'triangle-list'\n | 'triangle-strip'\n | 'triangle-fan-webgl';\n /** Auto calculated from attributes if not provided */\n vertexCount?: number;\n attributes?: Record<string, GeometryAttribute | TypedArray>;\n indices?: GeometryAttribute | TypedArray;\n};\n\nexport type GeometryAttributes = {\n POSITION: GeometryAttribute;\n NORMAL: GeometryAttribute;\n TEXCOORD_0: GeometryAttribute;\n COLOR_0?: GeometryAttribute;\n indices?: GeometryAttribute & {size: 1; value: Uint32Array | Uint16Array};\n};\n\nexport type GeometryAttribute = {\n size?: number;\n value: TypedArray;\n [key: string]: any;\n};\n\nexport class Geometry {\n readonly id: string;\n /** Determines how vertices are read from the 'vertex' attributes */\n readonly topology?: PrimitiveTopology;\n readonly vertexCount: number;\n readonly indices?: GeometryAttribute;\n readonly attributes: {\n POSITION: GeometryAttribute;\n NORMAL: GeometryAttribute;\n TEXCOORD_0: GeometryAttribute;\n COLOR_0?: GeometryAttribute;\n [key: string]: GeometryAttribute | undefined;\n };\n\n userData: Record<string, unknown> = {};\n\n constructor(props: GeometryProps) {\n const {attributes = {}, indices = null, vertexCount = null} = props;\n\n this.id = props.id || uid('geometry');\n this.topology = props.topology;\n\n if (indices) {\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 // Wrap \"unwrapped\" arrays and try to autodetect their type\n const attribute: GeometryAttribute = ArrayBuffer.isView(attributeValue)\n ? {value: attributeValue}\n : 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 this.indices = attribute;\n } else {\n this.attributes[attributeName] = attribute;\n }\n }\n\n if (this.indices && this.indices.isIndexed !== undefined) {\n this.indices = Object.assign({}, this.indices);\n delete this.indices.isIndexed;\n }\n\n this.vertexCount = vertexCount || this._calculateVertexCount(this.attributes, this.indices);\n }\n\n getVertexCount(): number {\n return this.vertexCount;\n }\n\n /** \n * Return an object with all attributes plus indices added as a field.\n * TODO Geometry types are a mess\n */\n getAttributes(): GeometryAttributes {\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 /**\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 * \n * @param attributes \n * @param indices \n * @returns \n */\n _setAttributes(attributes: Record<string, GeometryAttribute>, indices: any): this {\n return this;\n }\n\n _calculateVertexCount(attributes: GeometryAttributes, indices: GeometryAttribute): number {\n if (indices) {\n return indices.value.length;\n }\n let vertexCount = Infinity;\n for (const attribute of Object.values(attributes)) {\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"],"mappings":"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"}
1
+ {"version":3,"file":"geometry.js","names":["uid","assert","Geometry","constructor","props","id","topology","vertexCount","indices","attributes","userData","ArrayBuffer","isView","value","size","attributeName","attributeValue","Object","entries","attribute","_print","isIndexed","undefined","assign","_calculateVertexCount","getVertexCount","getAttributes","_setAttributes","length","Infinity","values","constant","Math","min","Number","isFinite"],"sources":["../../src/geometry/geometry.ts"],"sourcesContent":["// luma.gl, MIT license\nimport type {PrimitiveTopology, TypedArray} from '@luma.gl/core';\nimport {uid, assert} from '@luma.gl/core';\n\nexport type GeometryProps = {\n id?: string;\n /** Determines how vertices are read from the 'vertex' attributes */\n topology:\n | 'point-list'\n | 'line-list'\n | 'line-strip'\n | 'line-loop-webgl'\n | 'triangle-list'\n | 'triangle-strip'\n | 'triangle-fan-webgl';\n /** Auto calculated from attributes if not provided */\n vertexCount?: number;\n attributes?: Record<string, GeometryAttribute | TypedArray>;\n indices?: GeometryAttribute | TypedArray;\n};\n\nexport type GeometryAttributes = {\n POSITION: GeometryAttribute;\n NORMAL: GeometryAttribute;\n TEXCOORD_0: GeometryAttribute;\n COLOR_0?: GeometryAttribute;\n indices?: GeometryAttribute & {size: 1; value: Uint32Array | Uint16Array};\n};\n\nexport type GeometryAttribute = {\n size?: number;\n value: TypedArray;\n [key: string]: any;\n};\n\nexport class Geometry {\n readonly id: string;\n /** Determines how vertices are read from the 'vertex' attributes */\n readonly topology?: PrimitiveTopology;\n readonly vertexCount: number;\n readonly indices?: GeometryAttribute;\n readonly attributes: {\n POSITION: GeometryAttribute;\n NORMAL: GeometryAttribute;\n TEXCOORD_0: GeometryAttribute;\n COLOR_0?: GeometryAttribute;\n [key: string]: GeometryAttribute | undefined;\n };\n\n userData: Record<string, unknown> = {};\n\n constructor(props: GeometryProps) {\n const {attributes = {}, indices = null, vertexCount = null} = props;\n\n this.id = props.id || uid('geometry');\n this.topology = props.topology;\n\n if (indices) {\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 // Wrap \"unwrapped\" arrays and try to autodetect their type\n const attribute: GeometryAttribute = ArrayBuffer.isView(attributeValue)\n ? {value: attributeValue}\n : 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 this.indices = attribute;\n } else {\n this.attributes[attributeName] = attribute;\n }\n }\n\n if (this.indices && this.indices.isIndexed !== undefined) {\n this.indices = Object.assign({}, this.indices);\n delete this.indices.isIndexed;\n }\n\n this.vertexCount = vertexCount || this._calculateVertexCount(this.attributes, this.indices);\n }\n\n getVertexCount(): number {\n return this.vertexCount;\n }\n\n /** \n * Return an object with all attributes plus indices added as a field.\n * TODO Geometry types are a mess\n */\n getAttributes(): GeometryAttributes {\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 /**\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 * \n * @param attributes \n * @param indices \n * @returns \n */\n _setAttributes(attributes: Record<string, GeometryAttribute>, indices: any): this {\n return this;\n }\n\n _calculateVertexCount(attributes: GeometryAttributes, indices: GeometryAttribute): number {\n if (indices) {\n return indices.value.length;\n }\n let vertexCount = Infinity;\n for (const attribute of Object.values(attributes)) {\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"],"mappings":"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"}
@@ -9,13 +9,7 @@ export type GPUGeometryProps = {
9
9
  vertexCount: number;
10
10
  bufferLayout: BufferLayout[];
11
11
  indices?: Buffer | null;
12
- attributes: GPUGeometryAttributes;
13
- };
14
- export type GPUGeometryAttributes = {
15
- positions: Buffer;
16
- normals?: Buffer;
17
- texCoords?: Buffer;
18
- colors?: Buffer;
12
+ attributes: Record<string, Buffer>;
19
13
  };
20
14
  export declare class GPUGeometry {
21
15
  readonly id: string;
@@ -25,23 +19,18 @@ export declare class GPUGeometry {
25
19
  readonly bufferLayout: BufferLayout[];
26
20
  readonly vertexCount: number;
27
21
  readonly indices?: Buffer | null;
28
- readonly attributes: {
29
- positions: Buffer;
30
- normals?: Buffer;
31
- texCoords?: Buffer;
32
- colors?: Buffer;
33
- };
22
+ readonly attributes: Record<string, Buffer>;
34
23
  constructor(props: GPUGeometryProps);
35
24
  destroy(): void;
36
25
  getVertexCount(): number;
37
- getAttributes(): GPUGeometryAttributes;
26
+ getAttributes(): Record<string, Buffer>;
38
27
  getIndexes(): Buffer | null;
39
28
  _calculateVertexCount(positions: Buffer): number;
40
29
  }
41
30
  export declare function makeGPUGeometry(device: Device, geometry: Geometry | GPUGeometry): GPUGeometry;
42
31
  export declare function getIndexBufferFromGeometry(device: Device, geometry: Geometry): Buffer | undefined;
43
32
  export declare function getAttributeBuffersFromGeometry(device: Device, geometry: Geometry): {
44
- attributes: GPUGeometryAttributes;
33
+ attributes: Record<string, Buffer>;
45
34
  bufferLayout: BufferLayout[];
46
35
  vertexCount: number;
47
36
  };
@@ -1 +1 @@
1
- {"version":3,"file":"gpu-geometry.d.ts","sourceRoot":"","sources":["../../src/geometry/gpu-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACnE,OAAO,EAAC,MAAM,EAAE,MAAM,EAAc,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,QAAQ,EACJ,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,iBAAiB,GACjB,eAAe,GACf,gBAAgB,GAChB,oBAAoB,CAAC;IACzB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,qBAAqB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,WAAW;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAEvC,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,CAAM;IAE3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;gBAEU,KAAK,EAAE,gBAAgB;IA6BnC,OAAO,IAAI,IAAI;IAQf,cAAc,IAAI,MAAM;IAIxB,aAAa,IAAI,qBAAqB;IAItC,UAAU,IAAI,MAAM,GAAG,IAAI;IAI3B,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAKjD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW,CAc7F;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAWjG;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GACjB;IAAC,UAAU,EAAE,qBAAqB,CAAC;IAAC,YAAY,EAAE,YAAY,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,CAuBxF"}
1
+ {"version":3,"file":"gpu-geometry.d.ts","sourceRoot":"","sources":["../../src/geometry/gpu-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACnE,OAAO,EAAC,MAAM,EAAE,MAAM,EAAc,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,QAAQ,EACJ,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,iBAAiB,GACjB,eAAe,GACf,gBAAgB,GAChB,oBAAoB,CAAC;IACzB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF,qBAAa,WAAW;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAEvC,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,CAAM;IAE3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAEhC,KAAK,EAAE,gBAAgB;IAenC,OAAO,IAAI,IAAI;IAQf,cAAc,IAAI,MAAM;IAIxB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAIvC,UAAU,IAAI,MAAM,GAAG,IAAI;IAI3B,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAKjD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW,CAc7F;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAMjG;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GACjB;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,YAAY,EAAE,YAAY,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,CAoBzF"}
@@ -1,44 +1,19 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  import { Buffer, uid, assert } from '@luma.gl/core';
3
2
  export class GPUGeometry {
4
3
  constructor(props) {
5
- _defineProperty(this, "id", void 0);
6
- _defineProperty(this, "userData", {});
7
- _defineProperty(this, "topology", void 0);
8
- _defineProperty(this, "bufferLayout", []);
9
- _defineProperty(this, "vertexCount", void 0);
10
- _defineProperty(this, "indices", void 0);
11
- _defineProperty(this, "attributes", void 0);
4
+ this.id = void 0;
5
+ this.userData = {};
6
+ this.topology = void 0;
7
+ this.bufferLayout = [];
8
+ this.vertexCount = void 0;
9
+ this.indices = void 0;
10
+ this.attributes = void 0;
12
11
  this.id = props.id || uid('geometry');
13
12
  this.topology = props.topology;
14
13
  this.indices = props.indices || null;
15
14
  this.attributes = props.attributes;
16
15
  this.vertexCount = props.vertexCount;
17
16
  this.bufferLayout = props.bufferLayout || [];
18
- if (!this.bufferLayout.find(layout => layout.name === 'positions')) {
19
- this.bufferLayout.push({
20
- name: 'positions',
21
- format: 'float32x3'
22
- });
23
- }
24
- if (this.attributes.normals && !this.bufferLayout.find(layout => layout.name === 'normals')) {
25
- this.bufferLayout.push({
26
- name: 'normals',
27
- format: 'float32x3'
28
- });
29
- }
30
- if (this.attributes.texCoords && !this.bufferLayout.find(layout => layout.name === 'texCoords')) {
31
- this.bufferLayout.push({
32
- name: 'texCoords',
33
- format: 'float32x2'
34
- });
35
- }
36
- if (this.attributes.colors && !this.bufferLayout.find(layout => layout.name === 'colors')) {
37
- this.bufferLayout.push({
38
- name: 'colors',
39
- format: 'float32x3'
40
- });
41
- }
42
17
  if (this.indices) {
43
18
  assert(this.indices.usage === Buffer.INDEX);
44
19
  }
@@ -87,44 +62,34 @@ export function getIndexBufferFromGeometry(device, geometry) {
87
62
  return undefined;
88
63
  }
89
64
  const data = geometry.indices.value;
90
- assert(data instanceof Uint16Array || data instanceof Uint32Array, 'attribute array for "indices" must be of integer type');
91
65
  return device.createBuffer({
92
66
  usage: Buffer.INDEX,
93
67
  data
94
68
  });
95
69
  }
96
70
  export function getAttributeBuffersFromGeometry(device, geometry) {
97
- const positions = geometry.attributes.positions || geometry.attributes.POSITION;
98
- const normals = geometry.attributes.normals || geometry.attributes.NORMAL;
99
- const texCoords = geometry.attributes.texCoords || geometry.attributes.TEXCOORD_0;
100
- const attributes = {
101
- positions: device.createBuffer({
102
- data: positions.value,
103
- id: 'positions-buffer'
104
- })
105
- };
106
- const bufferLayout = [{
107
- name: 'positions',
108
- format: "float32x".concat(positions.size)
109
- }];
110
- if (normals) {
111
- attributes.normals = device.createBuffer({
112
- data: normals.value,
113
- id: 'normals-buffer'
114
- });
115
- bufferLayout.push({
116
- name: 'normals',
117
- format: "float32x".concat(normals.size)
118
- });
119
- }
120
- if (texCoords) {
121
- attributes.texCoords = device.createBuffer({
122
- data: texCoords.value,
123
- id: 'texCoords-buffer'
71
+ const bufferLayout = [];
72
+ const attributes = {};
73
+ for (const [attributeName, attribute] of Object.entries(geometry.attributes)) {
74
+ let name = attributeName;
75
+ switch (attributeName) {
76
+ case 'POSITION':
77
+ name = 'positions';
78
+ break;
79
+ case 'NORMAL':
80
+ name = 'normals';
81
+ break;
82
+ case 'TEXCOORD_0':
83
+ name = 'texCoords';
84
+ break;
85
+ }
86
+ attributes[name] = device.createBuffer({
87
+ data: attribute.value,
88
+ id: `${attributeName}-buffer`
124
89
  });
125
90
  bufferLayout.push({
126
- name: 'texCoords',
127
- format: "float32x".concat(texCoords.size)
91
+ name,
92
+ format: `float32x${attribute.size}`
128
93
  });
129
94
  }
130
95
  const vertexCount = geometry._calculateVertexCount(geometry.attributes, geometry.indices);
@@ -1 +1 @@
1
- {"version":3,"file":"gpu-geometry.js","names":["Buffer","uid","assert","GPUGeometry","constructor","props","_defineProperty","id","topology","indices","attributes","vertexCount","bufferLayout","find","layout","name","push","format","normals","texCoords","colors","usage","INDEX","destroy","_this$attributes$colo","positions","getVertexCount","getAttributes","getIndexes","_calculateVertexCount","byteLength","makeGPUGeometry","device","geometry","getIndexBufferFromGeometry","getAttributeBuffersFromGeometry","undefined","data","value","Uint16Array","Uint32Array","createBuffer","POSITION","NORMAL","TEXCOORD_0","concat","size"],"sources":["../../src/geometry/gpu-geometry.ts"],"sourcesContent":["import type {PrimitiveTopology, BufferLayout} from '@luma.gl/core';\nimport {Device, Buffer, uid, assert} from '@luma.gl/core';\nimport type {Geometry} from '../geometry/geometry';\n\nexport type GPUGeometryProps = {\n id?: string;\n /** Determines how vertices are read from the 'vertex' attributes */\n topology:\n | 'point-list'\n | 'line-list'\n | 'line-strip'\n | 'line-loop-webgl'\n | 'triangle-list'\n | 'triangle-strip'\n | 'triangle-fan-webgl';\n /** Auto calculated from attributes if not provided */\n vertexCount: number;\n bufferLayout: BufferLayout[];\n indices?: Buffer | null;\n attributes: GPUGeometryAttributes;\n};\n\nexport type GPUGeometryAttributes = {\n positions: Buffer;\n normals?: Buffer;\n texCoords?: Buffer;\n colors?: Buffer;\n};\n\nexport class GPUGeometry {\n readonly id: string;\n userData: Record<string, unknown> = {};\n\n /** Determines how vertices are read from the 'vertex' attributes */\n readonly topology?: PrimitiveTopology;\n readonly bufferLayout: BufferLayout[] = [];\n\n readonly vertexCount: number;\n readonly indices?: Buffer | null;\n readonly attributes: {\n positions: Buffer;\n normals?: Buffer;\n texCoords?: Buffer;\n colors?: Buffer;\n };\n\n constructor(props: GPUGeometryProps) {\n this.id = props.id || uid('geometry');\n this.topology = props.topology;\n this.indices = props.indices || null;\n this.attributes = props.attributes;\n\n //\n this.vertexCount = props.vertexCount;\n\n // Populate default bufferLayout\n this.bufferLayout = props.bufferLayout || [];\n if (!this.bufferLayout.find(layout => layout.name === 'positions')) {\n this.bufferLayout.push({name: 'positions', format: 'float32x3'});\n }\n if (this.attributes.normals && !this.bufferLayout.find(layout => layout.name === 'normals')) {\n this.bufferLayout.push({name: 'normals', format: 'float32x3'});\n }\n if (this.attributes.texCoords && !this.bufferLayout.find(layout => layout.name === 'texCoords')) {\n this.bufferLayout.push({name: 'texCoords', format: 'float32x2'});\n }\n if (this.attributes.colors && !this.bufferLayout.find(layout => layout.name === 'colors')) {\n this.bufferLayout.push({name: 'colors', format: 'float32x3'});\n }\n\n if (this.indices) {\n assert(this.indices.usage === Buffer.INDEX);\n }\n }\n\n destroy(): void {\n this.indices.destroy();\n this.attributes.positions.destroy();\n this.attributes.normals.destroy();\n this.attributes.texCoords.destroy();\n this.attributes.colors?.destroy();\n }\n\n getVertexCount(): number {\n return this.vertexCount;\n }\n\n getAttributes(): GPUGeometryAttributes {\n return this.attributes;\n }\n\n getIndexes(): Buffer | null {\n return this.indices;\n }\n\n _calculateVertexCount(positions: Buffer): number {\n // Assume that positions is a fully packed float32x3 buffer\n const vertexCount = positions.byteLength / 12;\n return vertexCount;\n }\n}\n\nexport function makeGPUGeometry(device: Device, geometry: Geometry | GPUGeometry): GPUGeometry {\n if (geometry instanceof GPUGeometry) {\n return geometry;\n }\n\n const indices = getIndexBufferFromGeometry(device, geometry);\n const {attributes, bufferLayout} = getAttributeBuffersFromGeometry(device, geometry);\n return new GPUGeometry({\n topology: geometry.topology || 'triangle-list',\n bufferLayout,\n vertexCount: geometry.vertexCount,\n indices,\n attributes\n });\n}\n\nexport function getIndexBufferFromGeometry(device: Device, geometry: Geometry): Buffer | undefined {\n if (!geometry.indices) {\n return undefined;\n }\n\n const data = geometry.indices.value;\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(\n device: Device,\n geometry: Geometry\n): {attributes: GPUGeometryAttributes, bufferLayout: BufferLayout[], vertexCount: number} {\n const positions = geometry.attributes.positions || geometry.attributes.POSITION;\n const normals = geometry.attributes.normals || geometry.attributes.NORMAL;\n const texCoords = geometry.attributes.texCoords || geometry.attributes.TEXCOORD_0;\n\n const attributes: GPUGeometryAttributes = {\n positions: device.createBuffer({data: positions.value, id: 'positions-buffer'})\n };\n const bufferLayout: BufferLayout[] = [\n {name: 'positions', format: `float32x${positions.size as 2 | 3 | 4}`}\n ];\n if (normals) {\n attributes.normals = device.createBuffer({data: normals.value, id: 'normals-buffer'});\n bufferLayout.push({name: 'normals', format: `float32x${normals.size as 2 | 3 | 4}`});\n }\n if (texCoords) {\n attributes.texCoords = device.createBuffer({data: texCoords.value, id: 'texCoords-buffer'});\n bufferLayout.push({name: 'texCoords', format: `float32x${texCoords.size as 2 | 3 | 4}`});\n }\n\n const vertexCount = geometry._calculateVertexCount(geometry.attributes, geometry.indices)\n\n return {attributes, bufferLayout, vertexCount};\n}\n"],"mappings":";AACA,SAAgBA,MAAM,EAAEC,GAAG,EAAEC,MAAM,QAAO,eAAe;AA4BzD,OAAO,MAAMC,WAAW,CAAC;EAiBvBC,WAAWA,CAACC,KAAuB,EAAE;IAAAC,eAAA;IAAAA,eAAA,mBAfD,CAAC,CAAC;IAAAA,eAAA;IAAAA,eAAA,uBAIE,EAAE;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAYxC,IAAI,CAACC,EAAE,GAAGF,KAAK,CAACE,EAAE,IAAIN,GAAG,CAAC,UAAU,CAAC;IACrC,IAAI,CAACO,QAAQ,GAAGH,KAAK,CAACG,QAAQ;IAC9B,IAAI,CAACC,OAAO,GAAGJ,KAAK,CAACI,OAAO,IAAI,IAAI;IACpC,IAAI,CAACC,UAAU,GAAGL,KAAK,CAACK,UAAU;IAGlC,IAAI,CAACC,WAAW,GAAGN,KAAK,CAACM,WAAW;IAGpC,IAAI,CAACC,YAAY,GAAGP,KAAK,CAACO,YAAY,IAAI,EAAE;IAC5C,IAAI,CAAC,IAAI,CAACA,YAAY,CAACC,IAAI,CAACC,MAAM,IAAIA,MAAM,CAACC,IAAI,KAAK,WAAW,CAAC,EAAE;MAClE,IAAI,CAACH,YAAY,CAACI,IAAI,CAAC;QAACD,IAAI,EAAE,WAAW;QAAEE,MAAM,EAAE;MAAW,CAAC,CAAC;IAClE;IACA,IAAI,IAAI,CAACP,UAAU,CAACQ,OAAO,IAAI,CAAC,IAAI,CAACN,YAAY,CAACC,IAAI,CAACC,MAAM,IAAIA,MAAM,CAACC,IAAI,KAAK,SAAS,CAAC,EAAE;MAC3F,IAAI,CAACH,YAAY,CAACI,IAAI,CAAC;QAACD,IAAI,EAAE,SAAS;QAAEE,MAAM,EAAE;MAAW,CAAC,CAAC;IAChE;IACA,IAAI,IAAI,CAACP,UAAU,CAACS,SAAS,IAAI,CAAC,IAAI,CAACP,YAAY,CAACC,IAAI,CAACC,MAAM,IAAIA,MAAM,CAACC,IAAI,KAAK,WAAW,CAAC,EAAE;MAC/F,IAAI,CAACH,YAAY,CAACI,IAAI,CAAC;QAACD,IAAI,EAAE,WAAW;QAAEE,MAAM,EAAE;MAAW,CAAC,CAAC;IAClE;IACA,IAAI,IAAI,CAACP,UAAU,CAACU,MAAM,IAAI,CAAC,IAAI,CAACR,YAAY,CAACC,IAAI,CAACC,MAAM,IAAIA,MAAM,CAACC,IAAI,KAAK,QAAQ,CAAC,EAAE;MACzF,IAAI,CAACH,YAAY,CAACI,IAAI,CAAC;QAACD,IAAI,EAAE,QAAQ;QAAEE,MAAM,EAAE;MAAW,CAAC,CAAC;IAC/D;IAEA,IAAI,IAAI,CAACR,OAAO,EAAE;MAChBP,MAAM,CAAC,IAAI,CAACO,OAAO,CAACY,KAAK,KAAKrB,MAAM,CAACsB,KAAK,CAAC;IAC7C;EACF;EAEAC,OAAOA,CAAA,EAAS;IAAA,IAAAC,qBAAA;IACd,IAAI,CAACf,OAAO,CAACc,OAAO,CAAC,CAAC;IACtB,IAAI,CAACb,UAAU,CAACe,SAAS,CAACF,OAAO,CAAC,CAAC;IACnC,IAAI,CAACb,UAAU,CAACQ,OAAO,CAACK,OAAO,CAAC,CAAC;IACjC,IAAI,CAACb,UAAU,CAACS,SAAS,CAACI,OAAO,CAAC,CAAC;IACnC,CAAAC,qBAAA,OAAI,CAACd,UAAU,CAACU,MAAM,cAAAI,qBAAA,uBAAtBA,qBAAA,CAAwBD,OAAO,CAAC,CAAC;EACnC;EAEAG,cAAcA,CAAA,EAAW;IACvB,OAAO,IAAI,CAACf,WAAW;EACzB;EAEAgB,aAAaA,CAAA,EAA0B;IACrC,OAAO,IAAI,CAACjB,UAAU;EACxB;EAEAkB,UAAUA,CAAA,EAAkB;IAC1B,OAAO,IAAI,CAACnB,OAAO;EACrB;EAEAoB,qBAAqBA,CAACJ,SAAiB,EAAU;IAE/C,MAAMd,WAAW,GAAGc,SAAS,CAACK,UAAU,GAAG,EAAE;IAC7C,OAAOnB,WAAW;EACpB;AACF;AAEA,OAAO,SAASoB,eAAeA,CAACC,MAAc,EAAEC,QAAgC,EAAe;EAC7F,IAAIA,QAAQ,YAAY9B,WAAW,EAAE;IACnC,OAAO8B,QAAQ;EACjB;EAEA,MAAMxB,OAAO,GAAGyB,0BAA0B,CAACF,MAAM,EAAEC,QAAQ,CAAC;EAC5D,MAAM;IAACvB,UAAU;IAAEE;EAAY,CAAC,GAAGuB,+BAA+B,CAACH,MAAM,EAAEC,QAAQ,CAAC;EACpF,OAAO,IAAI9B,WAAW,CAAC;IACrBK,QAAQ,EAAEyB,QAAQ,CAACzB,QAAQ,IAAI,eAAe;IAC9CI,YAAY;IACZD,WAAW,EAAEsB,QAAQ,CAACtB,WAAW;IACjCF,OAAO;IACPC;EACF,CAAC,CAAC;AACJ;AAEA,OAAO,SAASwB,0BAA0BA,CAACF,MAAc,EAAEC,QAAkB,EAAsB;EACjG,IAAI,CAACA,QAAQ,CAACxB,OAAO,EAAE;IACrB,OAAO2B,SAAS;EAClB;EAEA,MAAMC,IAAI,GAAGJ,QAAQ,CAACxB,OAAO,CAAC6B,KAAK;EACnCpC,MAAM,CACJmC,IAAI,YAAYE,WAAW,IAAIF,IAAI,YAAYG,WAAW,EAC1D,uDACF,CAAC;EACD,OAAOR,MAAM,CAACS,YAAY,CAAC;IAACpB,KAAK,EAAErB,MAAM,CAACsB,KAAK;IAAEe;EAAI,CAAC,CAAC;AACzD;AAEA,OAAO,SAASF,+BAA+BA,CAC7CH,MAAc,EACdC,QAAkB,EACsE;EACxF,MAAMR,SAAS,GAAGQ,QAAQ,CAACvB,UAAU,CAACe,SAAS,IAAIQ,QAAQ,CAACvB,UAAU,CAACgC,QAAQ;EAC/E,MAAMxB,OAAO,GAAGe,QAAQ,CAACvB,UAAU,CAACQ,OAAO,IAAIe,QAAQ,CAACvB,UAAU,CAACiC,MAAM;EACzE,MAAMxB,SAAS,GAAGc,QAAQ,CAACvB,UAAU,CAACS,SAAS,IAAIc,QAAQ,CAACvB,UAAU,CAACkC,UAAU;EAEjF,MAAMlC,UAAiC,GAAG;IACxCe,SAAS,EAAEO,MAAM,CAACS,YAAY,CAAC;MAACJ,IAAI,EAAEZ,SAAS,CAACa,KAAK;MAAE/B,EAAE,EAAE;IAAkB,CAAC;EAChF,CAAC;EACD,MAAMK,YAA4B,GAAG,CACnC;IAACG,IAAI,EAAE,WAAW;IAAEE,MAAM,aAAA4B,MAAA,CAAapB,SAAS,CAACqB,IAAI;EAAe,CAAC,CACtE;EACD,IAAI5B,OAAO,EAAE;IACXR,UAAU,CAACQ,OAAO,GAAGc,MAAM,CAACS,YAAY,CAAC;MAACJ,IAAI,EAAEnB,OAAO,CAACoB,KAAK;MAAE/B,EAAE,EAAE;IAAgB,CAAC,CAAC;IACrFK,YAAY,CAACI,IAAI,CAAC;MAACD,IAAI,EAAE,SAAS;MAAEE,MAAM,aAAA4B,MAAA,CAAa3B,OAAO,CAAC4B,IAAI;IAAe,CAAC,CAAC;EACtF;EACA,IAAI3B,SAAS,EAAE;IACbT,UAAU,CAACS,SAAS,GAAGa,MAAM,CAACS,YAAY,CAAC;MAACJ,IAAI,EAAElB,SAAS,CAACmB,KAAK;MAAE/B,EAAE,EAAE;IAAkB,CAAC,CAAC;IAC3FK,YAAY,CAACI,IAAI,CAAC;MAACD,IAAI,EAAE,WAAW;MAAEE,MAAM,aAAA4B,MAAA,CAAa1B,SAAS,CAAC2B,IAAI;IAAe,CAAC,CAAC;EAC1F;EAEA,MAAMnC,WAAW,GAAGsB,QAAQ,CAACJ,qBAAqB,CAACI,QAAQ,CAACvB,UAAU,EAAEuB,QAAQ,CAACxB,OAAO,CAAC;EAEzF,OAAO;IAACC,UAAU;IAAEE,YAAY;IAAED;EAAW,CAAC;AAChD"}
1
+ {"version":3,"file":"gpu-geometry.js","names":["Buffer","uid","assert","GPUGeometry","constructor","props","id","userData","topology","bufferLayout","vertexCount","indices","attributes","usage","INDEX","destroy","_this$attributes$colo","positions","normals","texCoords","colors","getVertexCount","getAttributes","getIndexes","_calculateVertexCount","byteLength","makeGPUGeometry","device","geometry","getIndexBufferFromGeometry","getAttributeBuffersFromGeometry","undefined","data","value","createBuffer","attributeName","attribute","Object","entries","name","push","format","size"],"sources":["../../src/geometry/gpu-geometry.ts"],"sourcesContent":["import type {PrimitiveTopology, BufferLayout} from '@luma.gl/core';\nimport {Device, Buffer, uid, assert} from '@luma.gl/core';\nimport type {Geometry} from '../geometry/geometry';\n\nexport type GPUGeometryProps = {\n id?: string;\n /** Determines how vertices are read from the 'vertex' attributes */\n topology:\n | 'point-list'\n | 'line-list'\n | 'line-strip'\n | 'line-loop-webgl'\n | 'triangle-list'\n | 'triangle-strip'\n | 'triangle-fan-webgl';\n /** Auto calculated from attributes if not provided */\n vertexCount: number;\n bufferLayout: BufferLayout[];\n indices?: Buffer | null;\n attributes: Record<string, Buffer>;\n};\n\nexport class GPUGeometry {\n readonly id: string;\n userData: Record<string, unknown> = {};\n\n /** Determines how vertices are read from the 'vertex' attributes */\n readonly topology?: PrimitiveTopology;\n readonly bufferLayout: BufferLayout[] = [];\n\n readonly vertexCount: number;\n readonly indices?: Buffer | null;\n readonly attributes: Record<string, Buffer>;\n\n constructor(props: GPUGeometryProps) {\n this.id = props.id || uid('geometry');\n this.topology = props.topology;\n this.indices = props.indices || null;\n this.attributes = props.attributes;\n\n this.vertexCount = props.vertexCount;\n\n this.bufferLayout = props.bufferLayout || [];\n\n if (this.indices) {\n assert(this.indices.usage === Buffer.INDEX);\n }\n }\n\n destroy(): void {\n this.indices.destroy();\n this.attributes.positions.destroy();\n this.attributes.normals.destroy();\n this.attributes.texCoords.destroy();\n this.attributes.colors?.destroy();\n }\n\n getVertexCount(): number {\n return this.vertexCount;\n }\n\n getAttributes(): Record<string, Buffer> {\n return this.attributes;\n }\n\n getIndexes(): Buffer | null {\n return this.indices;\n }\n\n _calculateVertexCount(positions: Buffer): number {\n // Assume that positions is a fully packed float32x3 buffer\n const vertexCount = positions.byteLength / 12;\n return vertexCount;\n }\n}\n\nexport function makeGPUGeometry(device: Device, geometry: Geometry | GPUGeometry): GPUGeometry {\n if (geometry instanceof GPUGeometry) {\n return geometry;\n }\n\n const indices = getIndexBufferFromGeometry(device, geometry);\n const {attributes, bufferLayout} = getAttributeBuffersFromGeometry(device, geometry);\n return new GPUGeometry({\n topology: geometry.topology || 'triangle-list',\n bufferLayout,\n vertexCount: geometry.vertexCount,\n indices,\n attributes\n });\n}\n\nexport function getIndexBufferFromGeometry(device: Device, geometry: Geometry): Buffer | undefined {\n if (!geometry.indices) {\n return undefined;\n }\n const data = geometry.indices.value;\n return device.createBuffer({usage: Buffer.INDEX, data});\n}\n\nexport function getAttributeBuffersFromGeometry(\n device: Device,\n geometry: Geometry\n): {attributes: Record<string, Buffer>, bufferLayout: BufferLayout[], vertexCount: number} {\n const bufferLayout: BufferLayout[] = [];\n\n const attributes: Record<string, Buffer> = {};\n for (const [attributeName, attribute] of Object.entries(geometry.attributes)) {\n let name: string = attributeName;\n // TODO Map some GLTF attribute names (is this still needed?)\n switch (attributeName) {\n case 'POSITION': name = 'positions'; break;\n case 'NORMAL': name = 'normals'; break;\n case 'TEXCOORD_0': name = 'texCoords'; break;\n }\n\n attributes[name] = device.createBuffer({data: attribute.value, id: `${attributeName}-buffer`});\n bufferLayout.push({name, format: `float32x${attribute.size as 2 | 3 | 4}`});\n }\n\n const vertexCount = geometry._calculateVertexCount(geometry.attributes, geometry.indices)\n\n return {attributes, bufferLayout, vertexCount};\n}\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -669,18 +669,6 @@ var GPUGeometry = class {
669
669
  this.attributes = props.attributes;
670
670
  this.vertexCount = props.vertexCount;
671
671
  this.bufferLayout = props.bufferLayout || [];
672
- if (!this.bufferLayout.find((layout) => layout.name === "positions")) {
673
- this.bufferLayout.push({ name: "positions", format: "float32x3" });
674
- }
675
- if (this.attributes.normals && !this.bufferLayout.find((layout) => layout.name === "normals")) {
676
- this.bufferLayout.push({ name: "normals", format: "float32x3" });
677
- }
678
- if (this.attributes.texCoords && !this.bufferLayout.find((layout) => layout.name === "texCoords")) {
679
- this.bufferLayout.push({ name: "texCoords", format: "float32x2" });
680
- }
681
- if (this.attributes.colors && !this.bufferLayout.find((layout) => layout.name === "colors")) {
682
- this.bufferLayout.push({ name: "colors", format: "float32x3" });
683
- }
684
672
  if (this.indices) {
685
673
  (0, import_core4.assert)(this.indices.usage === import_core4.Buffer.INDEX);
686
674
  }
@@ -726,29 +714,26 @@ function getIndexBufferFromGeometry(device, geometry) {
726
714
  return void 0;
727
715
  }
728
716
  const data = geometry.indices.value;
729
- (0, import_core4.assert)(
730
- data instanceof Uint16Array || data instanceof Uint32Array,
731
- 'attribute array for "indices" must be of integer type'
732
- );
733
717
  return device.createBuffer({ usage: import_core4.Buffer.INDEX, data });
734
718
  }
735
719
  function getAttributeBuffersFromGeometry(device, geometry) {
736
- const positions = geometry.attributes.positions || geometry.attributes.POSITION;
737
- const normals = geometry.attributes.normals || geometry.attributes.NORMAL;
738
- const texCoords = geometry.attributes.texCoords || geometry.attributes.TEXCOORD_0;
739
- const attributes = {
740
- positions: device.createBuffer({ data: positions.value, id: "positions-buffer" })
741
- };
742
- const bufferLayout = [
743
- { name: "positions", format: `float32x${positions.size}` }
744
- ];
745
- if (normals) {
746
- attributes.normals = device.createBuffer({ data: normals.value, id: "normals-buffer" });
747
- bufferLayout.push({ name: "normals", format: `float32x${normals.size}` });
748
- }
749
- if (texCoords) {
750
- attributes.texCoords = device.createBuffer({ data: texCoords.value, id: "texCoords-buffer" });
751
- bufferLayout.push({ name: "texCoords", format: `float32x${texCoords.size}` });
720
+ const bufferLayout = [];
721
+ const attributes = {};
722
+ for (const [attributeName, attribute] of Object.entries(geometry.attributes)) {
723
+ let name = attributeName;
724
+ switch (attributeName) {
725
+ case "POSITION":
726
+ name = "positions";
727
+ break;
728
+ case "NORMAL":
729
+ name = "normals";
730
+ break;
731
+ case "TEXCOORD_0":
732
+ name = "texCoords";
733
+ break;
734
+ }
735
+ attributes[name] = device.createBuffer({ data: attribute.value, id: `${attributeName}-buffer` });
736
+ bufferLayout.push({ name, format: `float32x${attribute.size}` });
752
737
  }
753
738
  const vertexCount = geometry._calculateVertexCount(geometry.attributes, geometry.indices);
754
739
  return { attributes, bufferLayout, vertexCount };
@@ -807,10 +792,15 @@ var _PipelineFactory = class {
807
792
  _hashRenderPipeline(props) {
808
793
  const vsHash = this._getHash(props.vs);
809
794
  const fsHash = props.fs ? this._getHash(props.fs) : 0;
810
- const parameterHash = this._getHash(JSON.stringify(props.parameters));
811
- const bufferLayoutHash = this._getHash(JSON.stringify(props.bufferLayout));
812
795
  const varyingHash = "-";
813
- return `${vsHash}/${fsHash}V${varyingHash}T${props.topology}P${parameterHash}BL${bufferLayoutHash}}`;
796
+ switch (this.device.info.type) {
797
+ case "webgpu":
798
+ const parameterHash = this._getHash(JSON.stringify(props.parameters));
799
+ const bufferLayoutHash = this._getHash(JSON.stringify(props.bufferLayout));
800
+ return `${vsHash}/${fsHash}V${varyingHash}T${props.topology}P${parameterHash}BL${bufferLayoutHash}}`;
801
+ default:
802
+ return `${vsHash}/${fsHash}V${varyingHash}`;
803
+ }
814
804
  }
815
805
  _getHash(key) {
816
806
  if (this._hashes[key] === void 0) {
@@ -929,9 +919,7 @@ var _Model = class {
929
919
  setTopology(topology) {
930
920
  if (topology !== this.topology) {
931
921
  this.topology = topology;
932
- if (this.device.info.type === "webgpu") {
933
- this._setPipelineNeedsUpdate("topology");
934
- }
922
+ this._setPipelineNeedsUpdate("topology");
935
923
  }
936
924
  }
937
925
  /**
@@ -941,9 +929,7 @@ var _Model = class {
941
929
  setBufferLayout(bufferLayout) {
942
930
  if (bufferLayout !== this.bufferLayout) {
943
931
  this.bufferLayout = bufferLayout;
944
- if (this.device.info.type === "webgpu") {
945
- this._setPipelineNeedsUpdate("bufferLayout");
946
- }
932
+ this._setPipelineNeedsUpdate("bufferLayout");
947
933
  }
948
934
  }
949
935
  /**
@@ -954,9 +940,7 @@ var _Model = class {
954
940
  setParameters(parameters) {
955
941
  if (!(0, import_core6.deepEqual)(parameters, this.parameters, 2)) {
956
942
  this.parameters = parameters;
957
- if (this.device.info.type === "webgpu") {
958
- this._setPipelineNeedsUpdate("parameters");
959
- }
943
+ this._setPipelineNeedsUpdate("parameters");
960
944
  }
961
945
  }
962
946
  // Update dynamic fields
@@ -1,10 +1,23 @@
1
- import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
2
- var _templateObject;
3
1
  import { glsl } from '@luma.gl/core';
4
2
  import { WebGLDevice } from '@luma.gl/webgl';
5
3
  import { Model } from "../model/model.js";
6
4
  import { Geometry } from "../geometry/geometry.js";
7
- 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"])));
5
+ const CLIPSPACE_VERTEX_SHADER = glsl`\
6
+ attribute vec2 aClipSpacePosition;
7
+ attribute vec2 aTexCoord;
8
+ attribute vec2 aCoordinate;
9
+
10
+ varying vec2 position;
11
+ varying vec2 coordinate;
12
+ varying vec2 uv;
13
+
14
+ void main(void) {
15
+ gl_Position = vec4(aClipSpacePosition, 0., 1.);
16
+ position = aClipSpacePosition;
17
+ coordinate = aCoordinate;
18
+ uv = aTexCoord;
19
+ }
20
+ `;
8
21
  const POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];
9
22
  export class ClipSpace extends Model {
10
23
  constructor(device, opts) {
@@ -1 +1 @@
1
- {"version":3,"file":"clip-space.js","names":["glsl","WebGLDevice","Model","Geometry","CLIPSPACE_VERTEX_SHADER","_templateObject","_taggedTemplateLiteral","POSITIONS","ClipSpace","constructor","device","opts","TEX_COORDS","map","coord","attach","vs","vertexCount","geometry","topology","attributes","aClipSpacePosition","size","value","Float32Array","aTexCoord","aCoordinate"],"sources":["../../src/lib/clip-space.ts"],"sourcesContent":["\n// ClipSpace\nimport {Device, glsl} from '@luma.gl/core';\nimport {WebGLDevice} from '@luma.gl/webgl';\nimport {Model, ModelProps} from '../model/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 topology: '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,SAAgBA,IAAI,QAAO,eAAe;AAC1C,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,EAAE,gBAAgB;QAC1BF,WAAW,EAAE,CAAC;QACdG,UAAU,EAAE;UACVC,kBAAkB,EAAE;YAACC,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACjB,SAAS;UAAC,CAAC;UACjEkB,SAAS,EAAE;YAACH,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACZ,UAAU;UAAC,CAAC;UACzDc,WAAW,EAAE;YAACJ,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACZ,UAAU;UAAC;QAC5D;MACF,CAAC;IACH,CACF,CAAC;EACH;AACF"}
1
+ {"version":3,"file":"clip-space.js","names":["glsl","WebGLDevice","Model","Geometry","CLIPSPACE_VERTEX_SHADER","POSITIONS","ClipSpace","constructor","device","opts","TEX_COORDS","map","coord","attach","vs","vertexCount","geometry","topology","attributes","aClipSpacePosition","size","value","Float32Array","aTexCoord","aCoordinate"],"sources":["../../src/lib/clip-space.ts"],"sourcesContent":["\n// ClipSpace\nimport {Device, glsl} from '@luma.gl/core';\nimport {WebGLDevice} from '@luma.gl/webgl';\nimport {Model, ModelProps} from '../model/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 topology: '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,SAAgBA,IAAI,QAAO,eAAe;AAC1C,SAAQC,WAAW,QAAO,gBAAgB;AAAC,SACnCC,KAAK;AAAA,SACLC,QAAQ;AAEhB,MAAMC,uBAAuB,GAAGJ,IAAK;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAGD,MAAMK,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,SAASJ,KAAK,CAAC;EACnCK,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,EAAEV,uBAAuB;MAC3BW,WAAW,EAAE,CAAC;MACdC,QAAQ,EAAE,IAAIb,QAAQ,CAAC;QACrBc,QAAQ,EAAE,gBAAgB;QAC1BF,WAAW,EAAE,CAAC;QACdG,UAAU,EAAE;UACVC,kBAAkB,EAAE;YAACC,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACjB,SAAS;UAAC,CAAC;UACjEkB,SAAS,EAAE;YAACH,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACZ,UAAU;UAAC,CAAC;UACzDc,WAAW,EAAE;YAACJ,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE,IAAIC,YAAY,CAACZ,UAAU;UAAC;QAC5D;MACF,CAAC;IACH,CACF,CAAC;EACH;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-factory.d.ts","sourceRoot":"","sources":["../../src/lib/pipeline-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AACvD,OAAO,EAAC,MAAM,EAAE,cAAc,EAAC,MAAM,eAAe,CAAC;AAErD,mDAAmD;AACnD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG;IAE1E,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAe;IAC1B,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAIlD;IAED,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsC;IAErE,MAAM,CAAC,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;gBAKrD,MAAM,EAAE,MAAM;IAI1B,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,cAAc;IAsBnE,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAYvC,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,GAAG,cAAc;IAclE,qEAAqE;IACrE,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM;IAqBxD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAM9B"}
1
+ {"version":3,"file":"pipeline-factory.d.ts","sourceRoot":"","sources":["../../src/lib/pipeline-factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AACvD,OAAO,EAAC,MAAM,EAAE,cAAc,EAAC,MAAM,eAAe,CAAC;AAErD,mDAAmD;AACnD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG;IAE1E,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAe;IAC1B,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAIlD;IAED,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsC;IAErE,MAAM,CAAC,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;gBAKrD,MAAM,EAAE,MAAM;IAI1B,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,cAAc;IAsBnE,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAYvC,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,GAAG,cAAc;IAclE,qEAAqE;IACrE,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM;IAuBxD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAM9B"}