@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.
- package/dist/animation/key-frames.js +6 -7
- package/dist/animation/key-frames.js.map +1 -1
- package/dist/animation/timeline.js +5 -6
- package/dist/animation/timeline.js.map +1 -1
- package/dist/animation-loop/animation-loop.js +18 -19
- package/dist/animation-loop/animation-loop.js.map +1 -1
- package/dist/dist.dev.js +88 -96
- package/dist/geometries/ico-sphere-geometry.js +1 -1
- package/dist/geometries/ico-sphere-geometry.js.map +1 -1
- package/dist/geometries/plane-geometry.js +4 -4
- package/dist/geometries/plane-geometry.js.map +1 -1
- package/dist/geometry/geometry.js +8 -9
- package/dist/geometry/geometry.js.map +1 -1
- package/dist/geometry/gpu-geometry.d.ts +4 -15
- package/dist/geometry/gpu-geometry.d.ts.map +1 -1
- package/dist/geometry/gpu-geometry.js +27 -62
- package/dist/geometry/gpu-geometry.js.map +1 -1
- package/dist/index.cjs +28 -44
- package/dist/lib/clip-space.js +16 -3
- package/dist/lib/clip-space.js.map +1 -1
- package/dist/lib/pipeline-factory.d.ts.map +1 -1
- package/dist/lib/pipeline-factory.js +15 -11
- package/dist/lib/pipeline-factory.js.map +1 -1
- package/dist/model/model.d.ts.map +1 -1
- package/dist/model/model.js +27 -34
- package/dist/model/model.js.map +1 -1
- package/dist/scenegraph/group-node.js +1 -2
- package/dist/scenegraph/group-node.js.map +1 -1
- package/dist/scenegraph/model-node.js +3 -4
- package/dist/scenegraph/model-node.js.map +1 -1
- package/dist/scenegraph/scenegraph-node.js +9 -10
- package/dist/scenegraph/scenegraph-node.js.map +1 -1
- package/dist/transform/transform.js +4 -5
- package/dist/transform/transform.js.map +1 -1
- package/dist.min.js +75 -75
- package/package.json +6 -6
- package/src/geometry/gpu-geometry.ts +18 -52
- package/src/lib/pipeline-factory.ts +13 -10
- 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[
|
|
35
|
-
const c2len = props[
|
|
36
|
-
const subdivisions1 = props[
|
|
37
|
-
const subdivisions2 = props[
|
|
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","
|
|
1
|
+
{"version":3,"file":"plane-geometry.js","names":["uid","Geometry","unpackIndexedGeometry","PlaneGeometry","constructor","props","arguments","length","undefined","id","indices","attributes","tesselatePlane","topology","type","offset","flipCull","unpack","coords","split","c1len","c2len","subdivisions1","subdivisions2","numVertices","positions","Float32Array","normals","texCoords","i2","i3","z","x","u","v","Error","numVertsAcross","Uint16Array","index","geometry","size","value","POSITION","NORMAL","TEXCOORD_0"],"sources":["../../src/geometries/plane-geometry.ts"],"sourcesContent":["import {uid} from '@luma.gl/core';\nimport {Geometry} from '../geometry/geometry';\nimport {unpackIndexedGeometry} from '../geometry/geometry-utils';\n\nexport type PlaneGeometryProps = {\n id?: string;\n radius?: number;\n attributes?: any\n};\n\n// Primitives inspired by TDL http://code.google.com/p/webglsamples/,\n// copyright 2011 Google Inc. new BSD License\n// (http://www.opensource.org/licenses/bsd-license.php).\nexport class PlaneGeometry extends Geometry {\n constructor(props: PlaneGeometryProps = {}) {\n const {id = uid('plane-geometry')} = props;\n\n const {indices, attributes} = tesselatePlane(props);\n super({\n ...props,\n id,\n topology: 'triangle-list',\n indices,\n attributes: {...attributes, ...props.attributes}\n });\n }\n}\n\n/* eslint-disable complexity, max-statements */\nfunction tesselatePlane(props: any) {\n const {type = 'x,y', offset = 0, flipCull = false, unpack = false} = props;\n\n const coords = type.split(',');\n // width, height\n let c1len = props[`${coords[0]}len`] || 1;\n const c2len = props[`${coords[1]}len`] || 1;\n // subdivisionsWidth, subdivisionsDepth\n const subdivisions1 = props[`n${coords[0]}`] || 1;\n const subdivisions2 = props[`n${coords[1]}`] || 1;\n const numVertices = (subdivisions1 + 1) * (subdivisions2 + 1);\n\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n const texCoords = new Float32Array(numVertices * 2);\n\n if (flipCull) {\n c1len = -c1len;\n }\n\n let i2 = 0;\n let i3 = 0;\n for (let z = 0; z <= subdivisions2; z++) {\n for (let x = 0; x <= subdivisions1; x++) {\n const u = x / subdivisions1;\n const v = z / subdivisions2;\n texCoords[i2 + 0] = flipCull ? 1 - u : u;\n texCoords[i2 + 1] = v;\n\n switch (type) {\n case 'x,y':\n positions[i3 + 0] = c1len * u - c1len * 0.5;\n positions[i3 + 1] = c2len * v - c2len * 0.5;\n positions[i3 + 2] = offset;\n\n normals[i3 + 0] = 0;\n normals[i3 + 1] = 0;\n normals[i3 + 2] = flipCull ? 1 : -1;\n break;\n\n case 'x,z':\n positions[i3 + 0] = c1len * u - c1len * 0.5;\n positions[i3 + 1] = offset;\n positions[i3 + 2] = c2len * v - c2len * 0.5;\n\n normals[i3 + 0] = 0;\n normals[i3 + 1] = flipCull ? 1 : -1;\n normals[i3 + 2] = 0;\n break;\n\n case 'y,z':\n positions[i3 + 0] = offset;\n positions[i3 + 1] = c1len * u - c1len * 0.5;\n positions[i3 + 2] = c2len * v - c2len * 0.5;\n\n normals[i3 + 0] = flipCull ? 1 : -1;\n normals[i3 + 1] = 0;\n normals[i3 + 2] = 0;\n break;\n\n default:\n throw new Error('PlaneGeometry: unknown type');\n }\n\n i2 += 2;\n i3 += 3;\n }\n }\n\n const numVertsAcross = subdivisions1 + 1;\n const indices = new Uint16Array(subdivisions1 * subdivisions2 * 6);\n\n for (let z = 0; z < subdivisions2; z++) {\n for (let x = 0; x < subdivisions1; x++) {\n const index = (z * subdivisions1 + x) * 6;\n // Make triangle 1 of quad.\n indices[index + 0] = (z + 0) * numVertsAcross + x;\n indices[index + 1] = (z + 1) * numVertsAcross + x;\n indices[index + 2] = (z + 0) * numVertsAcross + x + 1;\n\n // Make triangle 2 of quad.\n indices[index + 3] = (z + 1) * numVertsAcross + x;\n indices[index + 4] = (z + 1) * numVertsAcross + x + 1;\n indices[index + 5] = (z + 0) * numVertsAcross + x + 1;\n }\n }\n\n const geometry = {\n indices: {size: 1, value: indices},\n attributes: {\n POSITION: {size: 3, value: positions},\n NORMAL: {size: 3, value: normals},\n TEXCOORD_0: {size: 2, value: texCoords}\n }\n };\n\n // Optionally, unpack indexed geometry\n return unpack ? unpackIndexedGeometry(geometry) : geometry;\n}\n"],"mappings":"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"}
|
|
@@ -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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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),
|
|
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
|
|
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","
|
|
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:
|
|
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():
|
|
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:
|
|
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,
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
|
127
|
-
format:
|
|
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":"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"}
|
|
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
|
|
737
|
-
const
|
|
738
|
-
const
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
958
|
-
this._setPipelineNeedsUpdate("parameters");
|
|
959
|
-
}
|
|
943
|
+
this._setPipelineNeedsUpdate("parameters");
|
|
960
944
|
}
|
|
961
945
|
}
|
|
962
946
|
// Update dynamic fields
|
package/dist/lib/clip-space.js
CHANGED
|
@@ -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
|
|
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","
|
|
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":"
|
|
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"}
|