Skip to content
Snippets Groups Projects
Commit c28dd813 authored by Alexander Rose's avatar Alexander Rose
Browse files

perf tweaks

- reuse vec3 in getMatrices
- fast path in createElementSphereImpostor
parent 3baa03cc
No related branches found
No related tags found
No related merge requests found
......@@ -74,10 +74,11 @@ function operatorGroupsProvider(generators: Generator[], matrices: Matrices): ()
function getMatrices(pdbx_struct_oper_list: StructOperList): Matrices {
const { id, matrix, vector, _schema } = pdbx_struct_oper_list;
const matrices = new Map<string, Mat4>();
const t = Vec3();
for (let i = 0, _i = pdbx_struct_oper_list._rowCount; i < _i; i++) {
const m = Tensor.toMat4(Mat4(), _schema.matrix.space, matrix.value(i));
const t = Tensor.toVec3(Vec3(), _schema.vector.space, vector.value(i));
Tensor.toVec3(t, _schema.vector.space, vector.value(i));
Mat4.setTranslation(m, t);
Mat4.setValue(m, 3, 3, 1);
matrices.set(id.value(i), m);
......
/**
* 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>
* @author David Sehnal <david.sehnal@gmail.com>
......@@ -80,15 +80,15 @@ export function createElementSphereMesh(ctx: VisualContext, unit: Unit, structur
for (let i = 0; i < elementCount; i++) {
if (ignore && ignore(elements[i])) continue;
l.element = elements[i];
pos(elements[i], v);
v3add(center, center, v);
count += 1;
builderState.currentGroup = i;
l.element = elements[i];
const size = themeSize(l);
if (size > maxSize) maxSize = size;
builderState.currentGroup = i;
addSphere(builderState, v, size * sizeFactor, detail);
}
......@@ -132,17 +132,27 @@ export function createElementSphereImpostor(ctx: VisualContext, unit: Unit, stru
let maxSize = 0;
let count = 0;
for (let i = 0; i < elementCount; i++) {
if (ignore?.(elements[i])) continue;
if (ignore || theme.size.granularity !== 'uniform') {
for (let i = 0; i < elementCount; i++) {
if (ignore && ignore(elements[i])) continue;
pos(elements[i], v);
builder.add(v[0], v[1], v[2], i);
v3add(center, center, v);
count += 1;
pos(elements[i], v);
builder.add(v[0], v[1], v[2], i);
v3add(center, center, v);
count += 1;
l.element = elements[i];
const size = themeSize(l);
if (size > maxSize) maxSize = size;
l.element = elements[i];
const size = themeSize(l);
if (size > maxSize) maxSize = size;
}
} else {
for (let i = 0; i < elementCount; i++) {
pos(elements[i], v);
builder.add(v[0], v[1], v[2], i);
v3add(center, center, v);
}
count = elementCount;
maxSize = themeSize(l);
}
const oldBoundingSphere = spheres ? Sphere3D.clone(spheres.boundingSphere) : undefined;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment