molstar
Version:
A comprehensive macromolecular library.
186 lines • 8.08 kB
JavaScript
/**
* Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { __assign } from "tslib";
export function splitValues(schema, values) {
var attributeValues = {};
var defineValues = {};
var textureValues = {};
var uniformValues = {};
var materialUniformValues = {};
var bufferedUniformValues = {};
Object.keys(schema).forEach(function (k) {
var spec = schema[k];
if (spec.type === 'attribute')
attributeValues[k] = values[k];
if (spec.type === 'define')
defineValues[k] = values[k];
// check if k exists in values to exclude global textures
if (spec.type === 'texture' && values[k] !== undefined)
textureValues[k] = values[k];
// check if k exists in values to exclude global uniforms
if (spec.type === 'uniform' && values[k] !== undefined) {
if (spec.variant === 'material')
materialUniformValues[k] = values[k];
else if (spec.variant === 'buffered')
bufferedUniformValues[k] = values[k];
else
uniformValues[k] = values[k];
}
});
return { attributeValues: attributeValues, defineValues: defineValues, textureValues: textureValues, uniformValues: uniformValues, materialUniformValues: materialUniformValues, bufferedUniformValues: bufferedUniformValues };
}
export function getValueVersions(values) {
var versions = {};
Object.keys(values).forEach(function (k) {
versions[k] = values[k].ref.version;
});
return versions;
}
export function AttributeSpec(kind, itemSize, divisor) {
return { type: 'attribute', kind: kind, itemSize: itemSize, divisor: divisor };
}
export function UniformSpec(kind, variant) {
return { type: 'uniform', kind: kind, variant: variant };
}
export function TextureSpec(kind, format, dataType, filter) {
return { type: 'texture', kind: kind, format: format, dataType: dataType, filter: filter };
}
export function ElementsSpec(kind) {
return { type: 'elements', kind: kind };
}
export function DefineSpec(kind, options) {
return { type: 'define', kind: kind, options: options };
}
export function ValueSpec(kind) {
return { type: 'value', kind: kind };
}
//
export var GlobalUniformSchema = {
uModel: UniformSpec('m4'),
uView: UniformSpec('m4'),
uInvView: UniformSpec('m4'),
uModelView: UniformSpec('m4'),
uInvModelView: UniformSpec('m4'),
uProjection: UniformSpec('m4'),
uInvProjection: UniformSpec('m4'),
uModelViewProjection: UniformSpec('m4'),
uInvModelViewProjection: UniformSpec('m4'),
uIsOrtho: UniformSpec('f'),
uPixelRatio: UniformSpec('f'),
uViewport: UniformSpec('v4'),
uViewOffset: UniformSpec('v2'),
uDrawingBufferSize: UniformSpec('v2'),
uCameraPosition: UniformSpec('v3'),
uCameraDir: UniformSpec('v3'),
uNear: UniformSpec('f'),
uFar: UniformSpec('f'),
uFogNear: UniformSpec('f'),
uFogFar: UniformSpec('f'),
uFogColor: UniformSpec('v3'),
uTransparentBackground: UniformSpec('b'),
uClipObjectType: UniformSpec('i[]'),
uClipObjectInvert: UniformSpec('b[]'),
uClipObjectPosition: UniformSpec('v3[]'),
uClipObjectRotation: UniformSpec('v4[]'),
uClipObjectScale: UniformSpec('v3[]'),
// all the following could in principle be per object
// as a kind of 'material' parameter set
// would need to test performance implications
uLightIntensity: UniformSpec('f'),
uAmbientIntensity: UniformSpec('f'),
uMetalness: UniformSpec('f'),
uRoughness: UniformSpec('f'),
uReflectivity: UniformSpec('f'),
uPickingAlphaThreshold: UniformSpec('f'),
uInteriorDarkening: UniformSpec('f'),
uInteriorColorFlag: UniformSpec('b'),
uInteriorColor: UniformSpec('v3'),
uHighlightColor: UniformSpec('v3'),
uSelectColor: UniformSpec('v3'),
uHighlightStrength: UniformSpec('f'),
uSelectStrength: UniformSpec('f'),
uMarkerPriority: UniformSpec('i'),
uXrayEdgeFalloff: UniformSpec('f'),
uRenderWboit: UniformSpec('b'),
uMarkingDepthTest: UniformSpec('b'),
};
export var GlobalTextureSchema = {
tDepth: TextureSpec('texture', 'depth', 'ushort', 'nearest'),
};
export var InternalSchema = {
uObjectId: UniformSpec('i'),
};
export var ColorSchema = {
// aColor: AttributeSpec('float32', 3, 0), // TODO
uColor: UniformSpec('v3', 'material'),
uColorTexDim: UniformSpec('v2'),
uColorGridDim: UniformSpec('v3'),
uColorGridTransform: UniformSpec('v4'),
tColor: TextureSpec('image-uint8', 'rgb', 'ubyte', 'nearest'),
tPalette: TextureSpec('image-uint8', 'rgb', 'ubyte', 'nearest'),
tColorGrid: TextureSpec('texture', 'rgb', 'ubyte', 'linear'),
dColorType: DefineSpec('string', ['uniform', 'attribute', 'instance', 'group', 'groupInstance', 'vertex', 'vertexInstance', 'volume', 'volumeInstance']),
dUsePalette: DefineSpec('boolean'),
};
export var SizeSchema = {
// aSize: AttributeSpec('float32', 1, 0), // TODO
uSize: UniformSpec('f', 'material'),
uSizeTexDim: UniformSpec('v2'),
tSize: TextureSpec('image-uint8', 'rgb', 'ubyte', 'nearest'),
dSizeType: DefineSpec('string', ['uniform', 'attribute', 'instance', 'group', 'groupInstance']),
uSizeFactor: UniformSpec('f'),
};
export var MarkerSchema = {
uMarker: UniformSpec('f'),
uMarkerTexDim: UniformSpec('v2'),
tMarker: TextureSpec('image-uint8', 'alpha', 'ubyte', 'nearest'),
dMarkerType: DefineSpec('string', ['uniform', 'groupInstance']),
markerAverage: ValueSpec('number'),
markerStatus: ValueSpec('number'),
};
export var OverpaintSchema = {
uOverpaintTexDim: UniformSpec('v2'),
tOverpaint: TextureSpec('image-uint8', 'rgba', 'ubyte', 'nearest'),
dOverpaint: DefineSpec('boolean'),
};
export var TransparencySchema = {
uTransparencyTexDim: UniformSpec('v2'),
tTransparency: TextureSpec('image-uint8', 'alpha', 'ubyte', 'nearest'),
dTransparency: DefineSpec('boolean'),
transparencyAverage: ValueSpec('number'),
};
export var ClippingSchema = {
dClipObjectCount: DefineSpec('number'),
dClipVariant: DefineSpec('string', ['instance', 'pixel']),
uClippingTexDim: UniformSpec('v2'),
tClipping: TextureSpec('image-uint8', 'alpha', 'ubyte', 'nearest'),
dClipping: DefineSpec('boolean'),
};
export var BaseSchema = __assign(__assign(__assign(__assign(__assign(__assign({}, ColorSchema), MarkerSchema), OverpaintSchema), TransparencySchema), ClippingSchema), { aInstance: AttributeSpec('float32', 1, 1),
/**
* final per-instance transform calculated for instance `i` as
* `aTransform[i] = matrix * transform[i] * extraTransform[i]`
*/
aTransform: AttributeSpec('float32', 16, 1),
/**
* final alpha, calculated as `values.alpha * state.alpha`
*/
uAlpha: UniformSpec('f', 'material'), uVertexCount: UniformSpec('i'), uInstanceCount: UniformSpec('i'), uGroupCount: UniformSpec('i'), uInvariantBoundingSphere: UniformSpec('v4'), drawCount: ValueSpec('number'), instanceCount: ValueSpec('number'),
/** base alpha, see uAlpha */
alpha: ValueSpec('number'),
/** global transform, see aTransform */
matrix: ValueSpec('m4'),
/** base per-instance transform, see aTransform */
transform: ValueSpec('float32'),
/** additional per-instance transform, see aTransform */
extraTransform: ValueSpec('float32'),
/** denotes reflection in transform */
hasReflection: ValueSpec('boolean'),
/** bounding sphere taking aTransform into account and encompases all instances */
boundingSphere: ValueSpec('sphere'),
/** bounding sphere NOT taking aTransform into account */
invariantBoundingSphere: ValueSpec('sphere') });
//# sourceMappingURL=schema.js.map