UNPKG

molstar

Version:

A comprehensive macromolecular library.

363 lines (362 loc) 16.4 kB
/** * 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 {};