molstar
Version:
A comprehensive macromolecular library.
363 lines (362 loc) • 16.4 kB
TypeScript
/**
* Copyright (c) 2018-2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
* @author Gianluca Tomasello <giagitom@gmail.com>
*/
import { ValueCell } from '../../mol-util';
import { AttributeItemSize, ElementsKind, AttributeValues, AttributeKind, DataTypeArrayType } from '../webgl/buffer';
import { UniformKind, UniformValues, UniformKindValue } from '../webgl/uniform';
import { DefineKind, DefineValues } from '../shader-code';
import { Mat4 } from '../../mol-math/linear-algebra';
import { TextureValues, TextureType, TextureFormat, TextureFilter, TextureKind, TextureKindValue } from '../webgl/texture';
import { Sphere3D } from '../../mol-math/geometry';
import { InstanceGrid } from '../../mol-math/geometry/instance-grid';
export type ValueKindType = {
'number': number;
'string': string;
'boolean': boolean;
'any': any;
'unknown': unknown;
'm4': Mat4;
'float32': Float32Array;
'uint32': Uint32Array;
'sphere': Sphere3D;
'instanceGrid': InstanceGrid;
};
export type ValueKind = keyof ValueKindType;
export type KindValue = UniformKindValue & DataTypeArrayType & TextureKindValue & ValueKindType;
export type Values<S extends RenderableSchema> = {
readonly [k in keyof S]: ValueCell<KindValue[S[k]['kind']]>;
};
export type UnboxedValues<S extends RenderableSchema> = {
readonly [k in keyof S]: KindValue[S[k]['kind']];
};
export declare function splitValues(schema: RenderableSchema, values: RenderableValues): {
attributeValues: AttributeValues;
defineValues: DefineValues;
textureValues: TextureValues;
materialTextureValues: TextureValues;
uniformValues: UniformValues;
materialUniformValues: UniformValues;
bufferedUniformValues: UniformValues;
};
export type Versions<T extends RenderableValues> = {
-readonly [k in keyof T]: number;
};
export declare function getValueVersions<T extends RenderableValues>(values: T): Versions<T>;
export type AttributeSpec<K extends AttributeKind> = {
type: 'attribute';
kind: K;
itemSize: AttributeItemSize;
divisor: number;
};
export declare function AttributeSpec<K extends AttributeKind>(kind: K, itemSize: AttributeItemSize, divisor: number): AttributeSpec<K>;
type UniformVariant = 'material' | 'buffered';
export type UniformSpec<K extends UniformKind> = {
type: 'uniform';
kind: K;
variant?: UniformVariant;
};
export declare function UniformSpec<K extends UniformKind>(kind: K, variant?: UniformVariant): UniformSpec<K>;
type TextureVariant = 'material';
export type TextureSpec<K extends TextureKind> = {
type: 'texture';
kind: K;
format: TextureFormat;
dataType: TextureType;
filter: TextureFilter;
variant?: TextureVariant;
};
export declare function TextureSpec<K extends TextureKind>(kind: K, format: TextureFormat, dataType: TextureType, filter: TextureFilter, variant?: TextureVariant): TextureSpec<K>;
export type ElementsSpec<K extends ElementsKind> = {
type: 'elements';
kind: K;
};
export declare function ElementsSpec<K extends ElementsKind>(kind: K): ElementsSpec<K>;
export type DefineSpec<K extends DefineKind> = {
type: 'define';
kind: K;
options?: string[];
};
export declare function DefineSpec<K extends DefineKind>(kind: K, options?: string[]): DefineSpec<K>;
export type ValueSpec<K extends ValueKind> = {
type: 'value';
kind: K;
};
export declare function ValueSpec<K extends ValueKind>(kind: K): ValueSpec<K>;
export type RenderableSchema = {
readonly [k: string]: (AttributeSpec<AttributeKind> | UniformSpec<UniformKind> | TextureSpec<TextureKind> | ValueSpec<ValueKind> | DefineSpec<DefineKind> | ElementsSpec<ElementsKind>);
};
export type RenderableValues = {
readonly [k: string]: ValueCell<any>;
};
export declare const GlobalUniformSchema: {
readonly uDrawId: UniformSpec<"i">;
readonly uModel: UniformSpec<"m4">;
readonly uView: UniformSpec<"m4">;
readonly uInvView: UniformSpec<"m4">;
readonly uModelView: UniformSpec<"m4">;
readonly uInvModelView: UniformSpec<"m4">;
readonly uProjection: UniformSpec<"m4">;
readonly uInvProjection: UniformSpec<"m4">;
readonly uModelViewProjection: UniformSpec<"m4">;
readonly uInvModelViewProjection: UniformSpec<"m4">;
readonly uIsOrtho: UniformSpec<"f">;
readonly uPixelRatio: UniformSpec<"f">;
readonly uViewport: UniformSpec<"v4">;
readonly uViewOffset: UniformSpec<"v2">;
readonly uDrawingBufferSize: UniformSpec<"v2">;
readonly uCameraPosition: UniformSpec<"v3">;
readonly uCameraDir: UniformSpec<"v3">;
readonly uCameraPlane: UniformSpec<"v4">;
readonly uNear: UniformSpec<"f">;
readonly uFar: UniformSpec<"f">;
readonly uFog: UniformSpec<"b">;
readonly uFogNear: UniformSpec<"f">;
readonly uFogFar: UniformSpec<"f">;
readonly uFogColor: UniformSpec<"v3">;
readonly uTransparentBackground: UniformSpec<"b">;
readonly uLightDirection: UniformSpec<"v3[]">;
readonly uLightColor: UniformSpec<"v3[]">;
readonly uAmbientColor: UniformSpec<"v3">;
readonly uPickingAlphaThreshold: UniformSpec<"f">;
readonly uInteriorDarkening: UniformSpec<"f">;
readonly uInteriorColorFlag: UniformSpec<"b">;
readonly uInteriorColor: UniformSpec<"v3">;
readonly uHighlightColor: UniformSpec<"v3">;
readonly uSelectColor: UniformSpec<"v3">;
readonly uDimColor: UniformSpec<"v3">;
readonly uHighlightStrength: UniformSpec<"f">;
readonly uSelectStrength: UniformSpec<"f">;
readonly uDimStrength: UniformSpec<"f">;
readonly uMarkerPriority: UniformSpec<"i">;
readonly uMarkerAverage: UniformSpec<"f">;
readonly uXrayEdgeFalloff: UniformSpec<"f">;
readonly uCelSteps: UniformSpec<"f">;
readonly uExposure: UniformSpec<"f">;
readonly uRenderMask: UniformSpec<"i">;
readonly uMarkingDepthTest: UniformSpec<"b">;
readonly uMarkingType: UniformSpec<"i">;
readonly uPickType: UniformSpec<"i">;
};
export type GlobalUniformSchema = typeof GlobalUniformSchema;
export type GlobalUniformValues = Values<GlobalUniformSchema>;
export declare const GlobalTextureSchema: {
readonly tDepth: TextureSpec<"texture">;
readonly tDpoitDepth: TextureSpec<"texture">;
readonly tDpoitFrontColor: TextureSpec<"texture">;
readonly tDpoitBackColor: TextureSpec<"texture">;
};
export type GlobalTextureSchema = typeof GlobalTextureSchema;
export type GlobalTextureValues = Values<GlobalTextureSchema>;
export declare const InternalSchema: {
readonly uObjectId: UniformSpec<"i">;
};
export type InternalSchema = typeof InternalSchema;
export type InternalValues = Values<InternalSchema>;
export declare const ColorSchema: {
readonly uColor: UniformSpec<"v3">;
readonly uColorTexDim: UniformSpec<"v2">;
readonly uColorGridDim: UniformSpec<"v3">;
readonly uColorGridTransform: UniformSpec<"v4">;
readonly uPaletteDomain: UniformSpec<"v2">;
readonly uPaletteDefault: UniformSpec<"v3">;
readonly tColor: TextureSpec<"image-uint8">;
readonly tPalette: TextureSpec<"image-uint8">;
readonly tColorGrid: TextureSpec<"texture">;
readonly dColorType: DefineSpec<"string">;
readonly dUsePalette: DefineSpec<"boolean">;
};
export type ColorSchema = typeof ColorSchema;
export type ColorValues = Values<ColorSchema>;
export declare const SizeSchema: {
readonly uSize: UniformSpec<"f">;
readonly uSizeTexDim: UniformSpec<"v2">;
readonly tSize: TextureSpec<"image-uint8">;
readonly dSizeType: DefineSpec<"string">;
readonly uSizeFactor: UniformSpec<"f">;
};
export type SizeSchema = typeof SizeSchema;
export type SizeValues = Values<SizeSchema>;
export declare const MarkerSchema: {
readonly uMarker: UniformSpec<"f">;
readonly uMarkerTexDim: UniformSpec<"v2">;
readonly tMarker: TextureSpec<"image-uint8">;
readonly markerAverage: ValueSpec<"number">;
readonly markerStatus: ValueSpec<"number">;
readonly dMarkerType: DefineSpec<"string">;
};
export type MarkerSchema = typeof MarkerSchema;
export type MarkerValues = Values<MarkerSchema>;
export declare const OverpaintSchema: {
readonly uOverpaintTexDim: UniformSpec<"v2">;
readonly tOverpaint: TextureSpec<"image-uint8">;
readonly dOverpaint: DefineSpec<"boolean">;
readonly uOverpaintGridDim: UniformSpec<"v3">;
readonly uOverpaintGridTransform: UniformSpec<"v4">;
readonly tOverpaintGrid: TextureSpec<"texture">;
readonly dOverpaintType: DefineSpec<"string">;
readonly uOverpaintStrength: UniformSpec<"f">;
};
export type OverpaintSchema = typeof OverpaintSchema;
export type OverpaintValues = Values<OverpaintSchema>;
export declare const TransparencySchema: {
readonly uTransparencyTexDim: UniformSpec<"v2">;
readonly tTransparency: TextureSpec<"image-uint8">;
readonly dTransparency: DefineSpec<"boolean">;
readonly transparencyAverage: ValueSpec<"number">;
readonly transparencyMin: ValueSpec<"number">;
readonly uTransparencyGridDim: UniformSpec<"v3">;
readonly uTransparencyGridTransform: UniformSpec<"v4">;
readonly tTransparencyGrid: TextureSpec<"texture">;
readonly dTransparencyType: DefineSpec<"string">;
readonly uTransparencyStrength: UniformSpec<"f">;
};
export type TransparencySchema = typeof TransparencySchema;
export type TransparencyValues = Values<TransparencySchema>;
export declare const EmissiveSchema: {
readonly uEmissiveTexDim: UniformSpec<"v2">;
readonly tEmissive: TextureSpec<"image-uint8">;
readonly dEmissive: DefineSpec<"boolean">;
readonly emissiveAverage: ValueSpec<"number">;
readonly uEmissiveGridDim: UniformSpec<"v3">;
readonly uEmissiveGridTransform: UniformSpec<"v4">;
readonly tEmissiveGrid: TextureSpec<"texture">;
readonly dEmissiveType: DefineSpec<"string">;
readonly uEmissiveStrength: UniformSpec<"f">;
};
export type EmissiveSchema = typeof EmissiveSchema;
export type EmissiveValues = Values<EmissiveSchema>;
export declare const SubstanceSchema: {
readonly uSubstanceTexDim: UniformSpec<"v2">;
readonly tSubstance: TextureSpec<"image-uint8">;
readonly dSubstance: DefineSpec<"boolean">;
readonly uSubstanceGridDim: UniformSpec<"v3">;
readonly uSubstanceGridTransform: UniformSpec<"v4">;
readonly tSubstanceGrid: TextureSpec<"texture">;
readonly dSubstanceType: DefineSpec<"string">;
readonly uSubstanceStrength: UniformSpec<"f">;
};
export type SubstanceSchema = typeof SubstanceSchema;
export type SubstanceValues = Values<SubstanceSchema>;
export declare const ClippingSchema: {
readonly uClippingTexDim: UniformSpec<"v2">;
readonly tClipping: TextureSpec<"image-uint8">;
readonly dClipping: DefineSpec<"boolean">;
readonly dClippingType: DefineSpec<"string">;
};
export type ClippingSchema = typeof ClippingSchema;
export type ClippingValues = Values<ClippingSchema>;
export declare const BaseSchema: {
readonly dLightCount: DefineSpec<"number">;
readonly dColorMarker: DefineSpec<"boolean">;
readonly dClipObjectCount: DefineSpec<"number">;
readonly dClipVariant: DefineSpec<"string">;
readonly uClipObjectType: UniformSpec<"i[]">;
readonly uClipObjectInvert: UniformSpec<"b[]">;
readonly uClipObjectPosition: UniformSpec<"v3[]">;
readonly uClipObjectRotation: UniformSpec<"v4[]">;
readonly uClipObjectScale: UniformSpec<"v3[]">;
readonly uClipObjectTransform: UniformSpec<"m4[]">;
readonly aInstance: AttributeSpec<"float32">;
/**
* final per-instance transform calculated for instance `i` as
* `aTransform[i] = matrix * transform[i] * extraTransform[i]`
*/
readonly aTransform: AttributeSpec<"float32">;
/**
* final alpha, calculated as `values.alpha * state.alpha`
*/
readonly uAlpha: UniformSpec<"f">;
readonly uMetalness: UniformSpec<"f">;
readonly uRoughness: UniformSpec<"f">;
readonly uBumpiness: UniformSpec<"f">;
readonly uEmissive: UniformSpec<"f">;
/** density value to estimate object thickness */
readonly uDensity: UniformSpec<"f">;
readonly uVertexCount: UniformSpec<"i">;
readonly uInstanceCount: UniformSpec<"i">;
readonly uGroupCount: UniformSpec<"i">;
readonly uInvariantBoundingSphere: UniformSpec<"v4">;
readonly uLod: UniformSpec<"v4">;
readonly drawCount: ValueSpec<"number">;
readonly instanceCount: ValueSpec<"number">;
/** base alpha, see uAlpha */
readonly alpha: ValueSpec<"number">;
/** global transform, see aTransform */
readonly matrix: ValueSpec<"m4">;
/** base per-instance transform, see aTransform */
readonly transform: ValueSpec<"float32">;
/** additional per-instance transform, see aTransform */
readonly extraTransform: ValueSpec<"float32">;
/** denotes reflection in transform */
readonly hasReflection: ValueSpec<"boolean">;
/** use instance granularity for marker, transparency, clipping, overpaint, substance */
readonly instanceGranularity: ValueSpec<"boolean">;
/** bounding sphere taking aTransform into account and encompases all instances */
readonly boundingSphere: ValueSpec<"sphere">;
/** bounding sphere NOT taking aTransform into account */
readonly invariantBoundingSphere: ValueSpec<"sphere">;
readonly instanceGrid: ValueSpec<"instanceGrid">;
readonly uClippingTexDim: UniformSpec<"v2">;
readonly tClipping: TextureSpec<"image-uint8">;
readonly dClipping: DefineSpec<"boolean">;
readonly dClippingType: DefineSpec<"string">;
readonly uSubstanceTexDim: UniformSpec<"v2">;
readonly tSubstance: TextureSpec<"image-uint8">;
readonly dSubstance: DefineSpec<"boolean">;
readonly uSubstanceGridDim: UniformSpec<"v3">;
readonly uSubstanceGridTransform: UniformSpec<"v4">;
readonly tSubstanceGrid: TextureSpec<"texture">;
readonly dSubstanceType: DefineSpec<"string">;
readonly uSubstanceStrength: UniformSpec<"f">;
readonly uEmissiveTexDim: UniformSpec<"v2">;
readonly tEmissive: TextureSpec<"image-uint8">;
readonly dEmissive: DefineSpec<"boolean">;
readonly emissiveAverage: ValueSpec<"number">;
readonly uEmissiveGridDim: UniformSpec<"v3">;
readonly uEmissiveGridTransform: UniformSpec<"v4">;
readonly tEmissiveGrid: TextureSpec<"texture">;
readonly dEmissiveType: DefineSpec<"string">;
readonly uEmissiveStrength: UniformSpec<"f">;
readonly uTransparencyTexDim: UniformSpec<"v2">;
readonly tTransparency: TextureSpec<"image-uint8">;
readonly dTransparency: DefineSpec<"boolean">;
readonly transparencyAverage: ValueSpec<"number">;
readonly transparencyMin: ValueSpec<"number">;
readonly uTransparencyGridDim: UniformSpec<"v3">;
readonly uTransparencyGridTransform: UniformSpec<"v4">;
readonly tTransparencyGrid: TextureSpec<"texture">;
readonly dTransparencyType: DefineSpec<"string">;
readonly uTransparencyStrength: UniformSpec<"f">;
readonly uOverpaintTexDim: UniformSpec<"v2">;
readonly tOverpaint: TextureSpec<"image-uint8">;
readonly dOverpaint: DefineSpec<"boolean">;
readonly uOverpaintGridDim: UniformSpec<"v3">;
readonly uOverpaintGridTransform: UniformSpec<"v4">;
readonly tOverpaintGrid: TextureSpec<"texture">;
readonly dOverpaintType: DefineSpec<"string">;
readonly uOverpaintStrength: UniformSpec<"f">;
readonly uMarker: UniformSpec<"f">;
readonly uMarkerTexDim: UniformSpec<"v2">;
readonly tMarker: TextureSpec<"image-uint8">;
readonly markerAverage: ValueSpec<"number">;
readonly markerStatus: ValueSpec<"number">;
readonly dMarkerType: DefineSpec<"string">;
readonly uColor: UniformSpec<"v3">;
readonly uColorTexDim: UniformSpec<"v2">;
readonly uColorGridDim: UniformSpec<"v3">;
readonly uColorGridTransform: UniformSpec<"v4">;
readonly uPaletteDomain: UniformSpec<"v2">;
readonly uPaletteDefault: UniformSpec<"v3">;
readonly tColor: TextureSpec<"image-uint8">;
readonly tPalette: TextureSpec<"image-uint8">;
readonly tColorGrid: TextureSpec<"texture">;
readonly dColorType: DefineSpec<"string">;
readonly dUsePalette: DefineSpec<"boolean">;
readonly dGeometryType: DefineSpec<"string">;
};
export type BaseSchema = typeof BaseSchema;
export type BaseValues = Values<BaseSchema>;
export {};