@babylonjs/core 9.4.1 → 9.5.0
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/Cameras/Inputs/freeCameraTouchInput.js +5 -3
- package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraVirtualJoystickInput.js +11 -7
- package/Cameras/Inputs/freeCameraVirtualJoystickInput.js.map +1 -1
- package/Cameras/arcRotateCamera.js +2 -1
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.js +1 -0
- package/Cameras/camera.js.map +1 -1
- package/Cameras/followCamera.js +1 -1
- package/Cameras/followCamera.js.map +1 -1
- package/Collisions/gpuPicker.d.ts +12 -0
- package/Collisions/gpuPicker.js +51 -0
- package/Collisions/gpuPicker.js.map +1 -1
- package/Culling/ray.core.js +46 -2
- package/Culling/ray.core.js.map +1 -1
- package/Engines/Native/nativeHelpers.js +26 -0
- package/Engines/Native/nativeHelpers.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +26 -0
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/constants.d.ts +52 -0
- package/Engines/constants.js +52 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +13 -0
- package/Engines/thinEngine.js +52 -0
- package/Engines/thinEngine.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js +10 -3
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.d.ts +1 -0
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js +36 -3
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js.map +1 -1
- package/FlowGraph/flowGraphEventBlock.d.ts +13 -0
- package/FlowGraph/flowGraphEventBlock.js +21 -2
- package/FlowGraph/flowGraphEventBlock.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.js +26 -0
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/Layers/layer.js +5 -1
- package/Layers/layer.js.map +1 -1
- package/LensFlares/lensFlareSystem.js +1 -0
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Clustered/clusteredLightContainer.js +11 -1
- package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +14 -0
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.d.ts +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.js +6 -3
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +2 -0
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +10 -3
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.d.ts +2 -1
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js +10 -4
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.d.ts +11 -0
- package/Materials/PBR/openpbrMaterial.js +59 -12
- package/Materials/PBR/openpbrMaterial.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +26 -0
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/envCubeTexture.js +33 -15
- package/Materials/Textures/envCubeTexture.js.map +1 -1
- package/Materials/material.d.ts +16 -1
- package/Materials/material.js +16 -1
- package/Materials/material.js.map +1 -1
- package/Materials/standardMaterial.js +4 -2
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +16 -18
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.d.ts +24 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.js +93 -18
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.js.map +1 -1
- package/Meshes/abstractMesh.js +1 -0
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/mesh.js +3 -0
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/transformNode.d.ts +6 -0
- package/Meshes/transformNode.js +6 -0
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/brdfTextureTools.d.ts +12 -0
- package/Misc/brdfTextureTools.js +22 -0
- package/Misc/brdfTextureTools.js.map +1 -1
- package/Misc/depthReducer.js +1 -1
- package/Misc/depthReducer.js.map +1 -1
- package/Misc/snapshotRenderingHelper.d.ts +7 -1
- package/Misc/snapshotRenderingHelper.js +7 -1
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/textureTools.js +26 -0
- package/Misc/textureTools.js.map +1 -1
- package/Misc/tools.js +1 -1
- package/Misc/tools.js.map +1 -1
- package/Particles/Node/Blocks/Update/updateFlowMapBlock.js +17 -10
- package/Particles/Node/Blocks/Update/updateFlowMapBlock.js.map +1 -1
- package/Particles/Node/Blocks/Update/updateNoiseBlock.js +14 -0
- package/Particles/Node/Blocks/Update/updateNoiseBlock.js.map +1 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.js +114 -12
- package/Particles/Node/Blocks/particleSourceTextureBlock.js.map +1 -1
- package/Particles/Node/nodeParticleBuildState.d.ts +11 -0
- package/Particles/Node/nodeParticleBuildState.js +15 -0
- package/Particles/Node/nodeParticleBuildState.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.js +23 -22
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
- package/Particles/gpuParticleSystem.js +1 -0
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.js +1 -0
- package/Particles/thinParticleSystem.js.map +1 -1
- package/PostProcesses/postProcessManager.d.ts +2 -0
- package/PostProcesses/postProcessManager.js +14 -8
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +12 -9
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.js +6 -6
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/iblCdfGeneratorSceneComponent.d.ts +6 -0
- package/Rendering/iblCdfGeneratorSceneComponent.js +16 -0
- package/Rendering/iblCdfGeneratorSceneComponent.js.map +1 -1
- package/Rendering/prePassRenderer.d.ts +4 -1
- package/Rendering/prePassRenderer.js +31 -9
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
- package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrDirectLighting.js +18 -10
- package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +36 -14
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrIblFunctions.js +8 -5
- package/Shaders/ShadersInclude/openpbrIblFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js +10 -6
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/Shaders/openpbr.fragment.js +14 -15
- package/Shaders/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +19 -11
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js +3 -3
- package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +36 -14
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +5 -3
- package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +5 -6
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/ShadersWGSL/openpbr.fragment.js +16 -17
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/Sprites/spriteManager.js +1 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +16 -0
- package/scene.js +13 -0
- package/scene.js.map +1 -1
|
@@ -5,6 +5,7 @@ import { SubMesh } from "../subMesh.js";
|
|
|
5
5
|
import { type AbstractMesh } from "../abstractMesh.js";
|
|
6
6
|
import { Mesh } from "../mesh.js";
|
|
7
7
|
import { Matrix, Vector2, Vector3 } from "../../Maths/math.vector.js";
|
|
8
|
+
import { type InternalTexture } from "../../Materials/Textures/internalTexture.js";
|
|
8
9
|
import "../thinInstanceMesh.js";
|
|
9
10
|
import { type Material } from "../../Materials/material.js";
|
|
10
11
|
import { type Effect } from "../../Materials/effect.js";
|
|
@@ -14,6 +15,12 @@ interface IUpdateOptions {
|
|
|
14
15
|
/** @internal When set, skips reprocessing splats [0, previousVertexCount) and copies from cached arrays instead. */
|
|
15
16
|
previousVertexCount?: number;
|
|
16
17
|
}
|
|
18
|
+
interface ITextureDataUpdateCapableEngine {
|
|
19
|
+
updateTextureData(texture: InternalTexture, imageData: ArrayBufferView, xOffset: number, yOffset: number, width: number, height: number, faceIndex?: number, lod?: number, generateMipMaps?: boolean): void;
|
|
20
|
+
updateRawTexture(texture: Nullable<InternalTexture>, data: Nullable<ArrayBufferView>, format: number, invertY: boolean, compression?: Nullable<string>, type?: number, useSRGBBuffer?: boolean): void;
|
|
21
|
+
_gl?: unknown;
|
|
22
|
+
isWebGPU?: boolean;
|
|
23
|
+
}
|
|
17
24
|
/**
|
|
18
25
|
* Representation of the types
|
|
19
26
|
*/
|
|
@@ -262,6 +269,20 @@ export declare class GaussianSplattingMeshBase extends Mesh {
|
|
|
262
269
|
private static readonly _BatchSize;
|
|
263
270
|
private _cameraViewInfos;
|
|
264
271
|
protected static readonly _DefaultViewUpdateThreshold = 0.0001;
|
|
272
|
+
/**
|
|
273
|
+
* Returns a byte-accurate view for retained splat data, preserving any non-zero byte offset.
|
|
274
|
+
* @param data The retained splat source bytes.
|
|
275
|
+
* @returns A Uint8Array covering the exact source byte range.
|
|
276
|
+
* @internal
|
|
277
|
+
*/
|
|
278
|
+
protected static _GetSplatDataBytes(data: ArrayBuffer | ArrayBufferView): Uint8Array;
|
|
279
|
+
/**
|
|
280
|
+
* Returns a Float32 reinterpretation for retained splat data, copying only when alignment requires it.
|
|
281
|
+
* @param data The retained splat source bytes.
|
|
282
|
+
* @returns A Float32Array over the exact source byte range.
|
|
283
|
+
* @internal
|
|
284
|
+
*/
|
|
285
|
+
protected static _GetSplatDataFloats(data: ArrayBuffer | ArrayBufferView): Float32Array;
|
|
265
286
|
/**
|
|
266
287
|
* Cosine value of the angle threshold to update view dependent splat sorting. Default is 0.0001.
|
|
267
288
|
*/
|
|
@@ -573,6 +594,9 @@ export declare class GaussianSplattingMeshBase extends Mesh {
|
|
|
573
594
|
refreshBoundingInfo(): Mesh;
|
|
574
595
|
protected _updateSplatIndexBuffer(vertexCount: number): void;
|
|
575
596
|
protected _updateTextureFromData: (texture: BaseTexture, data: ArrayBufferView, width: number, lineStart: number, lineCount: number) => void;
|
|
597
|
+
protected _updateTextureFromDataRect: (texture: BaseTexture, data: ArrayBufferView, xOffset: number, yOffset: number, width: number, height: number) => void;
|
|
598
|
+
protected _getTextureDataUpdateEngine(): ITextureDataUpdateCapableEngine;
|
|
599
|
+
protected _updateShTextureData(texture: BaseTexture, shData: Uint8Array, textureWidth: number, lineStart: number, lineCount: number): void;
|
|
576
600
|
protected _updateSubTextures(centers: Float32Array, covA: Uint16Array, covB: Uint16Array, colors: Uint8Array, lineStart: number, lineCount: number, sh?: Uint8Array[]): void;
|
|
577
601
|
protected _instantiateWorker(): void;
|
|
578
602
|
protected _getTextureSize(length: number): Vector2;
|
|
@@ -191,6 +191,34 @@ var PLYValue;
|
|
|
191
191
|
* @internal Use GaussianSplattingMesh instead; this class is an internal implementation detail.
|
|
192
192
|
*/
|
|
193
193
|
export class GaussianSplattingMeshBase extends Mesh {
|
|
194
|
+
/**
|
|
195
|
+
* Returns a byte-accurate view for retained splat data, preserving any non-zero byte offset.
|
|
196
|
+
* @param data The retained splat source bytes.
|
|
197
|
+
* @returns A Uint8Array covering the exact source byte range.
|
|
198
|
+
* @internal
|
|
199
|
+
*/
|
|
200
|
+
static _GetSplatDataBytes(data) {
|
|
201
|
+
return ArrayBuffer.isView(data) ? new Uint8Array(data.buffer, data.byteOffset, data.byteLength) : new Uint8Array(data);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Returns a Float32 reinterpretation for retained splat data, copying only when alignment requires it.
|
|
205
|
+
* @param data The retained splat source bytes.
|
|
206
|
+
* @returns A Float32Array over the exact source byte range.
|
|
207
|
+
* @internal
|
|
208
|
+
*/
|
|
209
|
+
static _GetSplatDataFloats(data) {
|
|
210
|
+
const bytes = GaussianSplattingMeshBase._GetSplatDataBytes(data);
|
|
211
|
+
const floatSize = Float32Array.BYTES_PER_ELEMENT;
|
|
212
|
+
if (bytes.byteLength % floatSize !== 0) {
|
|
213
|
+
throw new Error(`Gaussian splat data byte length (${bytes.byteLength}) is not divisible by ${floatSize} and cannot be reinterpreted as Float32 data.`);
|
|
214
|
+
}
|
|
215
|
+
if (bytes.byteOffset % floatSize !== 0) {
|
|
216
|
+
const copy = new Uint8Array(bytes.byteLength);
|
|
217
|
+
copy.set(bytes);
|
|
218
|
+
return new Float32Array(copy.buffer, 0, bytes.byteLength / floatSize);
|
|
219
|
+
}
|
|
220
|
+
return new Float32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / floatSize);
|
|
221
|
+
}
|
|
194
222
|
/**
|
|
195
223
|
* If true, disables depth sorting of the splats (default: false)
|
|
196
224
|
*/
|
|
@@ -436,7 +464,12 @@ export class GaussianSplattingMeshBase extends Mesh {
|
|
|
436
464
|
this._disableDepthSort = false;
|
|
437
465
|
this._loadingPromise = null;
|
|
438
466
|
this._updateTextureFromData = (texture, data, width, lineStart, lineCount) => {
|
|
439
|
-
this.
|
|
467
|
+
const engine = this._getTextureDataUpdateEngine();
|
|
468
|
+
engine.updateTextureData(texture.getInternalTexture(), data, 0, lineStart, width, lineCount, 0, 0, false);
|
|
469
|
+
};
|
|
470
|
+
this._updateTextureFromDataRect = (texture, data, xOffset, yOffset, width, height) => {
|
|
471
|
+
const engine = this._getTextureDataUpdateEngine();
|
|
472
|
+
engine.updateTextureData(texture.getInternalTexture(), data, xOffset, yOffset, width, height, 0, 0, false);
|
|
440
473
|
};
|
|
441
474
|
this.subMeshes = [];
|
|
442
475
|
new SubMesh(0, 0, 4 * GaussianSplattingMeshBase._BatchSize, 0, 6 * GaussianSplattingMeshBase._BatchSize, this);
|
|
@@ -1702,8 +1735,8 @@ export class GaussianSplattingMeshBase extends Mesh {
|
|
|
1702
1735
|
const createTextureFromDataU8 = (data, width, height, format) => {
|
|
1703
1736
|
return new RawTexture(data, width, height, format, this._scene, false, false, 2, 0);
|
|
1704
1737
|
};
|
|
1705
|
-
const
|
|
1706
|
-
return new RawTexture(
|
|
1738
|
+
const createEmptyTextureU32 = (width, height, format) => {
|
|
1739
|
+
return new RawTexture(null, width, height, format, this._scene, false, false, 1, 7);
|
|
1707
1740
|
};
|
|
1708
1741
|
const createTextureFromDataF16 = (data, width, height, format) => {
|
|
1709
1742
|
return new RawTexture(data, width, height, format, this._scene, false, false, 2, 2);
|
|
@@ -1720,12 +1753,12 @@ export class GaussianSplattingMeshBase extends Mesh {
|
|
|
1720
1753
|
// Handle SH textures in update path - create if they don't exist
|
|
1721
1754
|
if (sh && !this._shTextures) {
|
|
1722
1755
|
this._shTextures = [];
|
|
1723
|
-
for (
|
|
1724
|
-
const
|
|
1725
|
-
const shTexture = createTextureFromDataU32(buffer, textureSize.x, textureSize.y, 11);
|
|
1756
|
+
for (let textureIndex = 0; textureIndex < sh.length; textureIndex++) {
|
|
1757
|
+
const shTexture = createEmptyTextureU32(textureSize.x, textureSize.y, 11);
|
|
1726
1758
|
shTexture.wrapU = 0;
|
|
1727
1759
|
shTexture.wrapV = 0;
|
|
1728
1760
|
this._shTextures.push(shTexture);
|
|
1761
|
+
this._updateShTextureData(shTexture, sh[textureIndex], textureSize.x, 0, textureSize.y);
|
|
1729
1762
|
}
|
|
1730
1763
|
}
|
|
1731
1764
|
if (this._needsRotationScaleTextures && this._rotationDataA) {
|
|
@@ -1758,13 +1791,15 @@ export class GaussianSplattingMeshBase extends Mesh {
|
|
|
1758
1791
|
this._colorsTexture = createTextureFromDataU8(colorArray, textureSize.x, textureSize.y, 5);
|
|
1759
1792
|
if (sh) {
|
|
1760
1793
|
this._shTextures = [];
|
|
1761
|
-
for (
|
|
1762
|
-
const
|
|
1763
|
-
const shTexture = createTextureFromDataU32(buffer, textureSize.x, textureSize.y, 11);
|
|
1794
|
+
for (let textureIndex = 0; textureIndex < sh.length; textureIndex++) {
|
|
1795
|
+
const shTexture = createEmptyTextureU32(textureSize.x, textureSize.y, 11);
|
|
1764
1796
|
shTexture.wrapU = 0;
|
|
1765
1797
|
shTexture.wrapV = 0;
|
|
1766
1798
|
this._shTextures.push(shTexture);
|
|
1767
1799
|
}
|
|
1800
|
+
for (let textureIndex = 0; textureIndex < sh.length; textureIndex++) {
|
|
1801
|
+
this._updateShTextureData(this._shTextures[textureIndex], sh[textureIndex], textureSize.x, 0, textureSize.y);
|
|
1802
|
+
}
|
|
1768
1803
|
}
|
|
1769
1804
|
if (this._needsRotationScaleTextures) {
|
|
1770
1805
|
const rotDataA = this._rotationDataA ?? new Uint16Array(covA.length);
|
|
@@ -2007,6 +2042,52 @@ export class GaussianSplattingMeshBase extends Mesh {
|
|
|
2007
2042
|
}
|
|
2008
2043
|
this.forcedInstanceCount = Math.max(paddedVertexCount >> 4, 1);
|
|
2009
2044
|
}
|
|
2045
|
+
_getTextureDataUpdateEngine() {
|
|
2046
|
+
return this.getEngine();
|
|
2047
|
+
}
|
|
2048
|
+
_updateShTextureData(texture, shData, textureWidth, lineStart, lineCount) {
|
|
2049
|
+
const engine = this._getTextureDataUpdateEngine();
|
|
2050
|
+
// NativeEngine/NullEngine, updateTextureData unsupported
|
|
2051
|
+
if (!engine._gl && !engine.isWebGPU) {
|
|
2052
|
+
const internalTexture = texture.getInternalTexture();
|
|
2053
|
+
const expectedByteLength = textureWidth * internalTexture.height * 16;
|
|
2054
|
+
let uploadData;
|
|
2055
|
+
if (shData.byteLength === expectedByteLength && shData.byteOffset % Uint32Array.BYTES_PER_ELEMENT === 0) {
|
|
2056
|
+
uploadData = new Uint32Array(shData.buffer, shData.byteOffset, shData.byteLength / Uint32Array.BYTES_PER_ELEMENT);
|
|
2057
|
+
}
|
|
2058
|
+
else {
|
|
2059
|
+
const padded = new Uint8Array(expectedByteLength);
|
|
2060
|
+
padded.set(shData.subarray(0, Math.min(shData.byteLength, expectedByteLength)));
|
|
2061
|
+
uploadData = new Uint32Array(padded.buffer);
|
|
2062
|
+
}
|
|
2063
|
+
engine.updateRawTexture(internalTexture, uploadData, internalTexture.format, internalTexture.invertY, null, internalTexture.type, internalTexture._useSRGBBuffer);
|
|
2064
|
+
return;
|
|
2065
|
+
}
|
|
2066
|
+
const bytesPerTexel = 16;
|
|
2067
|
+
const componentsPerTexel = 4;
|
|
2068
|
+
const startTexel = lineStart * textureWidth;
|
|
2069
|
+
const availableTexelCount = Math.floor(shData.byteLength / bytesPerTexel);
|
|
2070
|
+
if (startTexel >= availableTexelCount) {
|
|
2071
|
+
return;
|
|
2072
|
+
}
|
|
2073
|
+
let texelCount = Math.min(lineCount * textureWidth, availableTexelCount - startTexel);
|
|
2074
|
+
if (texelCount <= 0) {
|
|
2075
|
+
return;
|
|
2076
|
+
}
|
|
2077
|
+
const createView = (byteOffset, viewTexelCount) => {
|
|
2078
|
+
return new Uint32Array(shData.buffer, shData.byteOffset + byteOffset, viewTexelCount * componentsPerTexel);
|
|
2079
|
+
};
|
|
2080
|
+
const fullRowCount = Math.floor(texelCount / textureWidth);
|
|
2081
|
+
if (fullRowCount > 0) {
|
|
2082
|
+
const fullRowTexelCount = fullRowCount * textureWidth;
|
|
2083
|
+
this._updateTextureFromData(texture, createView(startTexel * bytesPerTexel, fullRowTexelCount), textureWidth, lineStart, fullRowCount);
|
|
2084
|
+
texelCount -= fullRowTexelCount;
|
|
2085
|
+
}
|
|
2086
|
+
if (texelCount > 0) {
|
|
2087
|
+
const partialRowOffset = (startTexel + fullRowCount * textureWidth) * bytesPerTexel;
|
|
2088
|
+
this._updateTextureFromDataRect(texture, createView(partialRowOffset, texelCount), 0, lineStart + fullRowCount, texelCount, 1);
|
|
2089
|
+
}
|
|
2090
|
+
}
|
|
2010
2091
|
_updateSubTextures(centers, covA, covB, colors, lineStart, lineCount, sh) {
|
|
2011
2092
|
const textureSize = this._getTextureSize(this._vertexCount);
|
|
2012
2093
|
const covBSItemSize = this._useRGBACovariants ? 4 : 2;
|
|
@@ -2030,9 +2111,7 @@ export class GaussianSplattingMeshBase extends Mesh {
|
|
|
2030
2111
|
}
|
|
2031
2112
|
if (sh) {
|
|
2032
2113
|
for (let i = 0; i < sh.length; i++) {
|
|
2033
|
-
|
|
2034
|
-
const shView = new Uint32Array(sh[i].buffer, texelStart * componentCount * 4, texelCount * componentCount);
|
|
2035
|
-
this._updateTextureFromData(this._shTextures[i], shView, textureSize.x, lineStart, lineCount);
|
|
2114
|
+
this._updateShTextureData(this._shTextures[i], sh[i], textureSize.x, lineStart, lineCount);
|
|
2036
2115
|
}
|
|
2037
2116
|
}
|
|
2038
2117
|
}
|
|
@@ -2164,12 +2243,8 @@ export class GaussianSplattingMeshBase extends Mesh {
|
|
|
2164
2243
|
if (!srcRaw || srcCount === 0) {
|
|
2165
2244
|
return;
|
|
2166
2245
|
}
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
// correctly instead of value-converting each element.
|
|
2170
|
-
const srcBuffer = srcRaw instanceof ArrayBuffer ? srcRaw : srcRaw.buffer;
|
|
2171
|
-
const uBuffer = new Uint8Array(srcBuffer);
|
|
2172
|
-
const fBuffer = new Float32Array(srcBuffer);
|
|
2246
|
+
const uBuffer = GaussianSplattingMeshBase._GetSplatDataBytes(srcRaw);
|
|
2247
|
+
const fBuffer = GaussianSplattingMeshBase._GetSplatDataFloats(srcRaw);
|
|
2173
2248
|
for (let i = 0; i < srcCount; i++) {
|
|
2174
2249
|
this._makeSplat(dstOffset + i, fBuffer, uBuffer, covA, covB, colorArray, minimum, maximum, false, i);
|
|
2175
2250
|
}
|