UNPKG

molstar

Version:

A comprehensive macromolecular library.

186 lines 8.08 kB
/** * 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