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