|
@@ -1,5 +1,5 @@
|
|
|
/**
|
|
|
- * Copyright (c) 2018-2022 mol* contributors, licensed under MIT, See LICENSE file for more info.
|
|
|
+ * Copyright (c) 2018-2023 mol* contributors, licensed under MIT, See LICENSE file for more info.
|
|
|
*
|
|
|
* @author Alexander Rose <alexander.rose@weirdbyte.de>
|
|
|
*/
|
|
@@ -10,6 +10,10 @@ import { BoundaryHelper } from '../../mol-math/geometry/boundary-helper';
|
|
|
import { TextureFilter } from '../webgl/texture';
|
|
|
import { arrayMinMax } from '../../mol-util/array';
|
|
|
|
|
|
+// avoiding namespace lookup improved performance in Chrome (Aug 2020)
|
|
|
+const v3fromArray = Vec3.fromArray;
|
|
|
+const v3transformMat4Offset = Vec3.transformMat4Offset;
|
|
|
+
|
|
|
export function calculateTextureInfo(n: number, itemSize: number) {
|
|
|
n = Math.max(n, 2); // observed issues with 1 pixel textures
|
|
|
const sqN = Math.sqrt(n);
|
|
@@ -137,21 +141,21 @@ export function calculateInvariantBoundingSphere(position: Float32Array, positio
|
|
|
|
|
|
boundaryHelper.reset();
|
|
|
for (let i = 0, _i = positionCount * 3; i < _i; i += step) {
|
|
|
- Vec3.fromArray(v, position, i);
|
|
|
+ v3fromArray(v, position, i);
|
|
|
boundaryHelper.includePosition(v);
|
|
|
}
|
|
|
boundaryHelper.finishedIncludeStep();
|
|
|
for (let i = 0, _i = positionCount * 3; i < _i; i += step) {
|
|
|
- Vec3.fromArray(v, position, i);
|
|
|
+ v3fromArray(v, position, i);
|
|
|
boundaryHelper.radiusPosition(v);
|
|
|
}
|
|
|
|
|
|
const sphere = boundaryHelper.getSphere();
|
|
|
|
|
|
- if (positionCount <= 98) {
|
|
|
+ if (positionCount <= 14) {
|
|
|
const extrema: Vec3[] = [];
|
|
|
for (let i = 0, _i = positionCount * 3; i < _i; i += step) {
|
|
|
- extrema.push(Vec3.fromArray(Vec3(), position, i));
|
|
|
+ extrema.push(v3fromArray(Vec3(), position, i));
|
|
|
}
|
|
|
Sphere3D.setExtrema(sphere, extrema);
|
|
|
}
|
|
@@ -174,28 +178,28 @@ export function calculateTransformBoundingSphere(invariantBoundingSphere: Sphere
|
|
|
const { center, radius, extrema } = invariantBoundingSphere;
|
|
|
|
|
|
// only use extrema if there are not too many transforms
|
|
|
- if (extrema && transformCount < 50) {
|
|
|
+ if (extrema && transformCount <= 14) {
|
|
|
for (let i = 0, _i = transformCount; i < _i; ++i) {
|
|
|
for (const e of extrema) {
|
|
|
- Vec3.transformMat4Offset(v, e, transform, 0, 0, i * 16);
|
|
|
+ v3transformMat4Offset(v, e, transform, 0, 0, i * 16);
|
|
|
boundaryHelper.includePosition(v);
|
|
|
}
|
|
|
}
|
|
|
boundaryHelper.finishedIncludeStep();
|
|
|
for (let i = 0, _i = transformCount; i < _i; ++i) {
|
|
|
for (const e of extrema) {
|
|
|
- Vec3.transformMat4Offset(v, e, transform, 0, 0, i * 16);
|
|
|
+ v3transformMat4Offset(v, e, transform, 0, 0, i * 16);
|
|
|
boundaryHelper.radiusPosition(v);
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
for (let i = 0, _i = transformCount; i < _i; ++i) {
|
|
|
- Vec3.transformMat4Offset(v, center, transform, 0, 0, i * 16);
|
|
|
+ v3transformMat4Offset(v, center, transform, 0, 0, i * 16);
|
|
|
boundaryHelper.includePositionRadius(v, radius);
|
|
|
}
|
|
|
boundaryHelper.finishedIncludeStep();
|
|
|
for (let i = 0, _i = transformCount; i < _i; ++i) {
|
|
|
- Vec3.transformMat4Offset(v, center, transform, 0, 0, i * 16);
|
|
|
+ v3transformMat4Offset(v, center, transform, 0, 0, i * 16);
|
|
|
boundaryHelper.radiusPositionRadius(v, radius);
|
|
|
}
|
|
|
}
|