/** * Copyright (c) 2018-2025 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose * @author Gianluca Tomasello */ import { ValueCell } from '../../mol-util/index.js'; import { AttributeItemSize, ElementsKind, AttributeValues, AttributeKind, DataTypeArrayType } from '../webgl/buffer.js'; import { UniformKind, UniformValues, UniformKindValue } from '../webgl/uniform.js'; import { DefineKind, DefineValues } from '../shader-code.js'; import { Mat4 } from '../../mol-math/linear-algebra.js'; import { TextureValues, TextureType, TextureFormat, TextureFilter, TextureKind, TextureKindValue } from '../webgl/texture.js'; import { Sphere3D } from '../../mol-math/geometry.js'; import { InstanceGrid } from '../../mol-math/geometry/instance-grid.js'; 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 = { readonly [k in keyof S]: ValueCell; }; export type UnboxedValues = { 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 = { -readonly [k in keyof T]: number; }; export declare function getValueVersions(values: T): Versions; export type AttributeSpec = { type: 'attribute'; kind: K; itemSize: AttributeItemSize; divisor: number; }; export declare function AttributeSpec(kind: K, itemSize: AttributeItemSize, divisor: number): AttributeSpec; type UniformVariant = 'material' | 'buffered'; export type UniformSpec = { type: 'uniform'; kind: K; variant?: UniformVariant; }; export declare function UniformSpec(kind: K, variant?: UniformVariant): UniformSpec; type TextureVariant = 'material'; export type TextureSpec = { type: 'texture'; kind: K; format: TextureFormat; dataType: TextureType; filter: TextureFilter; variant?: TextureVariant; }; export declare function TextureSpec(kind: K, format: TextureFormat, dataType: TextureType, filter: TextureFilter, variant?: TextureVariant): TextureSpec; export type ElementsSpec = { type: 'elements'; kind: K; }; export declare function ElementsSpec(kind: K): ElementsSpec; export type DefineSpec = { type: 'define'; kind: K; options?: string[]; }; export declare function DefineSpec(kind: K, options?: string[]): DefineSpec; export type ValueSpec = { type: 'value'; kind: K; }; export declare function ValueSpec(kind: K): ValueSpec; export type RenderableSchema = { readonly [k: string]: (AttributeSpec | UniformSpec | TextureSpec | ValueSpec | DefineSpec | ElementsSpec); }; export type RenderableValues = { readonly [k: string]: ValueCell; }; 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 uHasHeadRotation: UniformSpec<"b">; readonly uInvHeadRotation: UniformSpec<"m4">; readonly uIsAsymmetricProjection: UniformSpec<"b">; readonly uHasEyeCamera: UniformSpec<"b">; readonly uModelViewEye: UniformSpec<"m4">; readonly uInvModelViewEye: UniformSpec<"m4">; readonly uIsOrtho: UniformSpec<"f">; readonly uPixelRatio: UniformSpec<"f">; readonly uViewport: UniformSpec<"v4">; readonly uViewOffset: UniformSpec<"v2">; readonly uModelScale: UniformSpec<"f">; 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 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; 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; export declare const GlobalDefineSchema: { readonly dLightCount: DefineSpec<"number">; readonly dColorMarker: DefineSpec<"boolean">; }; export type GlobalDefineSchema = typeof GlobalDefineSchema; export type GlobalDefineValues = Values; export type GlobalDefines = UnboxedValues; export declare const InternalSchema: { readonly uObjectId: UniformSpec<"i">; }; export type InternalSchema = typeof InternalSchema; export type InternalValues = Values; 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; 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; 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; 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; 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; 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; 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; 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; export declare const BaseSchema: { 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; export declare const InteriorSchema: { readonly uInteriorColor: UniformSpec<"v4">; readonly uInteriorSubstance: UniformSpec<"v4">; }; export type InteriorSchema = typeof InteriorSchema; export type InteriorValues = Values; export {};