import type { Matrix3, Matrix4, Vector2, Vector3, Vector4, NumberArray2, NumberArray3, NumberArray4, NumberArray6, NumberArray8, NumberArray9, NumberArray12, NumberArray16 } from '@math.gl/core'; import type {CompositeShaderType} from '@luma.gl/core'; /* * Allowed types to be used for uniform values * * Only allow types whose length we can type-check (not `TypedArray`) */ export type UniformValue = Readonly< | number | boolean | NumberArray2 | NumberArray3 | NumberArray4 | NumberArray6 | NumberArray8 | NumberArray9 | NumberArray12 | NumberArray16 | Vector2 | Vector3 | Vector4 | Matrix3 | Matrix4 >; export type ShaderModuleUniformValue = | UniformValue | ShaderModuleUniformStruct | ShaderModuleUniformArray; export type ShaderModuleUniformStruct = { [name: string]: ShaderModuleUniformValue | undefined; }; export type ShaderModuleUniformArray = ReadonlyArray; type UniformLeafType = ValueT extends number | boolean ? 'f32' | 'i32' | 'u32' : ValueT extends Readonly ? 'vec2' | 'vec2' | 'vec2' : ValueT extends Readonly ? 'vec3' | 'vec3' | 'vec3' : ValueT extends Readonly ? 'vec4' | 'vec4' | 'vec4' | 'mat2x2' : ValueT extends Readonly ? 'mat2x3' | 'mat3x2' : ValueT extends Readonly ? 'mat2x4' | 'mat4x2' : ValueT extends Readonly ? 'mat3x3' : ValueT extends Readonly ? 'mat3x4' | 'mat4x3' : ValueT extends Readonly ? 'mat4x4' : never; type UniformType = ValueT extends UniformValue ? UniformLeafType : ValueT extends ReadonlyArray ? readonly [UniformType>, number] : ValueT extends Record ? {[name in keyof ValueT]-?: UniformType>} : never; type UniformProps = Record; export type UniformTypes = { [name in keyof PropsT]-?: UniformType> & CompositeShaderType; };