|
@@ -9,8 +9,10 @@ import { Vec2 } from '../../mol-math/linear-algebra';
|
|
import { TextureImage, createTextureImage } from '../../mol-gl/renderable/util';
|
|
import { TextureImage, createTextureImage } from '../../mol-gl/renderable/util';
|
|
|
|
|
|
export type MarkerData = {
|
|
export type MarkerData = {
|
|
|
|
+ uMarker: ValueCell<number>,
|
|
tMarker: ValueCell<TextureImage<Uint8Array>>
|
|
tMarker: ValueCell<TextureImage<Uint8Array>>
|
|
uMarkerTexDim: ValueCell<Vec2>
|
|
uMarkerTexDim: ValueCell<Vec2>
|
|
|
|
+ dMarkerType: ValueCell<string>,
|
|
markerAverage: ValueCell<number>
|
|
markerAverage: ValueCell<number>
|
|
markerStatus: ValueCell<number>
|
|
markerStatus: ValueCell<number>
|
|
}
|
|
}
|
|
@@ -19,7 +21,7 @@ export function getMarkersAverage(array: Uint8Array, count: number): number {
|
|
if (count === 0) return 0;
|
|
if (count === 0) return 0;
|
|
let sum = 0;
|
|
let sum = 0;
|
|
for (let i = 0; i < count; ++i) {
|
|
for (let i = 0; i < count; ++i) {
|
|
- if (array[i]) sum += 1;
|
|
|
|
|
|
+ sum += +!!array[i];
|
|
}
|
|
}
|
|
return sum / count;
|
|
return sum / count;
|
|
}
|
|
}
|
|
@@ -29,17 +31,21 @@ export function createMarkers(count: number, markerData?: MarkerData): MarkerDat
|
|
const average = getMarkersAverage(markers.array, count);
|
|
const average = getMarkersAverage(markers.array, count);
|
|
const status = average === 0 ? 0 : -1;
|
|
const status = average === 0 ? 0 : -1;
|
|
if (markerData) {
|
|
if (markerData) {
|
|
|
|
+ ValueCell.updateIfChanged(markerData.uMarker, 0);
|
|
ValueCell.update(markerData.tMarker, markers);
|
|
ValueCell.update(markerData.tMarker, markers);
|
|
ValueCell.update(markerData.uMarkerTexDim, Vec2.create(markers.width, markers.height));
|
|
ValueCell.update(markerData.uMarkerTexDim, Vec2.create(markers.width, markers.height));
|
|
|
|
+ ValueCell.updateIfChanged(markerData.dMarkerType, status === -1 ? 'groupInstance' : 'uniform');
|
|
ValueCell.updateIfChanged(markerData.markerAverage, average);
|
|
ValueCell.updateIfChanged(markerData.markerAverage, average);
|
|
ValueCell.updateIfChanged(markerData.markerStatus, status);
|
|
ValueCell.updateIfChanged(markerData.markerStatus, status);
|
|
return markerData;
|
|
return markerData;
|
|
} else {
|
|
} else {
|
|
return {
|
|
return {
|
|
|
|
+ uMarker: ValueCell.create(0),
|
|
tMarker: ValueCell.create(markers),
|
|
tMarker: ValueCell.create(markers),
|
|
uMarkerTexDim: ValueCell.create(Vec2.create(markers.width, markers.height)),
|
|
uMarkerTexDim: ValueCell.create(Vec2.create(markers.width, markers.height)),
|
|
markerAverage: ValueCell.create(average),
|
|
markerAverage: ValueCell.create(average),
|
|
markerStatus: ValueCell.create(status),
|
|
markerStatus: ValueCell.create(status),
|
|
|
|
+ dMarkerType: ValueCell.create('uniform'),
|
|
};
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -47,17 +53,21 @@ export function createMarkers(count: number, markerData?: MarkerData): MarkerDat
|
|
const emptyMarkerTexture = { array: new Uint8Array(1), width: 1, height: 1 };
|
|
const emptyMarkerTexture = { array: new Uint8Array(1), width: 1, height: 1 };
|
|
export function createEmptyMarkers(markerData?: MarkerData): MarkerData {
|
|
export function createEmptyMarkers(markerData?: MarkerData): MarkerData {
|
|
if (markerData) {
|
|
if (markerData) {
|
|
|
|
+ ValueCell.updateIfChanged(markerData.uMarker, 0);
|
|
ValueCell.update(markerData.tMarker, emptyMarkerTexture);
|
|
ValueCell.update(markerData.tMarker, emptyMarkerTexture);
|
|
ValueCell.update(markerData.uMarkerTexDim, Vec2.create(1, 1));
|
|
ValueCell.update(markerData.uMarkerTexDim, Vec2.create(1, 1));
|
|
|
|
+ ValueCell.updateIfChanged(markerData.dMarkerType, 'uniform');
|
|
ValueCell.updateIfChanged(markerData.markerAverage, 0);
|
|
ValueCell.updateIfChanged(markerData.markerAverage, 0);
|
|
ValueCell.updateIfChanged(markerData.markerStatus, 0);
|
|
ValueCell.updateIfChanged(markerData.markerStatus, 0);
|
|
return markerData;
|
|
return markerData;
|
|
} else {
|
|
} else {
|
|
return {
|
|
return {
|
|
|
|
+ uMarker: ValueCell.create(0),
|
|
tMarker: ValueCell.create(emptyMarkerTexture),
|
|
tMarker: ValueCell.create(emptyMarkerTexture),
|
|
uMarkerTexDim: ValueCell.create(Vec2.create(1, 1)),
|
|
uMarkerTexDim: ValueCell.create(Vec2.create(1, 1)),
|
|
markerAverage: ValueCell.create(0),
|
|
markerAverage: ValueCell.create(0),
|
|
markerStatus: ValueCell.create(0),
|
|
markerStatus: ValueCell.create(0),
|
|
|
|
+ dMarkerType: ValueCell.create('uniform'),
|
|
};
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}
|